Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2012, 21:52   #1
PinkPink
Пользователь
 
Регистрация: 09.10.2011
Сообщений: 98
По умолчанию Не хочет отображаться =(

Неужели такая сложная проблема, что никто не может подсказать в чём дело??

Задание:
//В рабочей области отображена кнопка с надписью "Нажмите правую клавишу мыши над рабочей областью".
//После нажатия правой клавиши мыши кнопка скрывается и отображается многострочный редактор с текстом
//"Нажмите левую клавишу мыши над рабочей областью".
//После нажатия левой клавиши мыши вернуться к исходному состоянию.


Почти всё работает, кроме того, что текстовый редактор отказался вообще отображаться((

Код:

#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
static TCHAR szWindowClass[] = _T("win32app");
static TCHAR szTitle[] = _T("Win32 Guided Tour Application");
HINSTANCE hInst;
BOOL RC(WNDPROC, LPCTSTR, UINT);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//функция оконной процедуры
#define ID_BUTTON   3000
#define ID_EDIT 2000

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nCmdShow)  ///главная функция
{
    hInst=hInstance;
    if(!RC(WndProc,szWindowClass,COLOR_WINDOW)) return FALSE;
       //создаём окно
 
HWND hWnd = CreateWindow(
    szWindowClass,
    szTitle,
    WS_OVERLAPPEDWINDOW|WS_VISIBLE,
    CW_USEDEFAULT, CW_USEDEFAULT,
    500, 500,
    NULL,
    NULL,
    hInstance,
    NULL
);

if (!hWnd)
{
    MessageBox(NULL,
        _T("Call to CreateWindow failed!"),
        _T("Win32 Guided Tour"),
        NULL);
 
    return FALSE;
}

//отображаем окно
 
ShowWindow(hWnd,
    nCmdShow);
UpdateWindow(hWnd);
 
//цикл обработки сообщений отправляемых ОС
 
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return (int) msg.wParam;
 
}
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)//добавляем функциональные возможности
{
	static HWND hButton; 
	HWND hEdit = {0};
    PAINTSTRUCT ps;
    HDC hdc;
    TCHAR greeting[] = _T("An");
	TCHAR but[] = _T("BUTTON");
	TCHAR butt[] = _T("Нажмите правую клавишу мыши над рабочей областью");
	TCHAR text[] = _T("edit");
	TCHAR textt[] = _T("Нажмите левую клавишу мыши над рабочей областью");
    switch (message)
    {
		
        case WM_PAINT:
            hdc = BeginPaint(hWnd, &ps);
                TextOut(hdc,
                    5, 5,
                    greeting, _tcslen(greeting));
            EndPaint(hWnd, &ps);

        break;
 		

        case WM_DESTROY:
        PostQuitMessage(0);
        break;

		case WM_CREATE:
		{	hButton=CreateWindow(but, butt, WS_VISIBLE|WS_CHILD,0,0,400,50,hWnd,(HMENU)ID_BUTTON,hInst,NULL);
		hEdit = CreateWindow(text, textt, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE, 30, 30, 230,300, hWnd, (HMENU) ID_EDIT, hInst, NULL);
		ShowWindow(hEdit,SW_HIDE);
		return 0;
		}
		
		case WM_RBUTTONDOWN:
			ShowWindow(hEdit,SW_SHOW);
			ShowWindow(hButton,SW_HIDE);
			break;
		case WM_LBUTTONDOWN:
			//hEdit = CreateWindow(text, textt, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE, 30, 30, 230,400, hWnd, (HMENU) ID_EDIT, hInst, NULL);
			ShowWindow(hButton,SW_RESTORE);
			ShowWindow(hEdit,SW_HIDE);
			break;
        default:return DefWindowProc(hWnd, message, wParam, lParam);break;
	}
return 0;
}
 

BOOL RC(WNDPROC WndProc, LPCTSTR Name, UINT brBackground)
{
    
WNDCLASS wc = { 0 }; 
    wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
 
    wc.lpfnWndProc=WndProc; //указывает на функцию окна
    wc.hInstance=hInst; //указывает на дескриптор текущего приложения
    wc.hIcon=LoadIcon(hInst,MAKEINTRESOURCE(IDI_APPLICATION)); //иконка
    wc.hCursor=LoadCursor(NULL, IDC_ARROW); //курсор
    wc.hbrBackground=(HBRUSH)( brBackground +1); //  задает дескриптор кисти закрашивания фона окна
    wc.lpszMenuName=NULL; // имя 
    wc.lpszClassName=Name; //имя класса окон
return (RegisterClass(&wc)!=0);
}

Последний раз редактировалось PinkPink; 30.09.2012 в 22:43.
PinkPink вне форума Ответить с цитированием
Старый 01.10.2012, 09:29   #2
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Нужно HWND hEdit в оконной процедуре так же сделать static или сделать ее глобальной.
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 05.10.2015, 15:49   #3
165salavei
Новичок
Джуниор
 
Регистрация: 05.10.2015
Сообщений: 1
По умолчанию Такой вариант:

Код:
#include <windows.h>
#include <tchar.h>
#define ID_BUTTON 1002
#define ID_EDIT 1001
// Вар_9. В рабочей области отображена кнопка с надписью 
//«Нажмите правую клавишу мыши над рабочей областью». 
//После нажатия правой клавиши мыши кнопка скрывается и отображается 
//многострочный редактор(GetTextExtentPoint32) с текстом «Нажмите левую клавишу мыши над рабочей областью». 
//После нажатия левой клавиши мыши вернуться к исходному состоянию.
//_________________________________________________________________________

//-- Prototypes -------------------

LRESULT CALLBACK SimWndProc(HWND, UINT, WPARAM, LPARAM);
BOOL RegClass(WNDPROC, LPCTSTR, UINT);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

//-- Global Variables ------------

LPCTSTR g_lpszClossName = TEXT("sp_pr2_class");
LPCTSTR g_lpszAplicationTitle = TEXT("Соловей Алексей");//для указателя на строку главное окно приложения
LPCTSTR g_lpszDestroyMessage = TEXT("Разрушается окно. В связи с этим поступило сообщение WM_DESTROY, из оброботчика которого и выполнен данный вывод. ");//текст используется при выводе сообщения о закрытии окна
HINSTANCE g_hInstance;

//  Стартовая функция

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpszCmdLine, int nCmdShow)
{
	MSG msg;
	HWND hWnd;
	g_hInstance = hInstance;
	if (!RegClass(SimWndProc, g_lpszClossName, COLOR_WINDOW))//регистрация класса окон
		return FALSE;
	if (!(hWnd = CreateWindow(g_lpszClossName,//указатель на имя класса
		g_lpszAplicationTitle,//указатель на имя окна
		WS_OVERLAPPEDWINDOW | WS_VISIBLE,//стиль окна
		100,//координата левого края окна
		50,//координата верхнего края окна
		1000,//ширина окна
		700,//высота окна
		0,//дескриптор окна-родителя или окна-владельца
		0,//дескриптор меню или идентификатор дочернего окна
		hInstance,//дескриптор экземпляра приложения
		NULL//указатель на данные окна
		))) return FALSE;
	ShowWindow(hWnd, nCmdShow);//функция для отображения окна
	UpdateWindow(hWnd);//функция сообщает функции окна hWnd о необходимости "перерисовки" рабочей облости

	while (GetMessage(&msg, 0, 0, 0))//цикл обработки сообщений
	{
		TranslateMessage(&msg);//транслирует клавиатурные сообщения
		DispatchMessage(&msg);//распределяет сообщения по функциям окна. Здесь происходит вызов функции окна
	}
	return msg.wParam;
}
//Описание функции регистрации классов
BOOL RegClass(WNDPROC Proc, LPCTSTR szName,
	UINT brBackground)
{
	WNDCLASS wc; wc.style = wc.cbClsExtra = wc.cbWndExtra = 0;
	wc.lpfnWndProc = Proc;
	wc.hInstance = g_hInstance;
	wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = (HBRUSH)(brBackground + 1);
	wc.lpszMenuName = (LPCTSTR)NULL;
	wc.lpszClassName = szName;
	return(RegisterClass(&wc) != 0);
}

//описание функции регистрации классов
LRESULT CALLBACK SimWndProc(HWND hWnd,//дескриптор окна-адресата
	UINT msg,//код сообщения
	WPARAM wParam,//содержимое сообщения
	LPARAM lParam)//содержимое сообщения
{
	HDC hDC;
	static HWND hEdit, hButton, hStatic;
	TCHAR chBuff[80];
	do{
		switch (msg)//обработка сообощения
		{
		case WM_CREATE:
		{
						  //Создание кнопки
						  hButton = CreateWindow(TEXT("button"), TEXT("Нажмите правую клавишу мыши над рабочей областью"),
							  WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
							  10, 80, 500, 20, hWnd,
							  (HMENU)ID_BUTTON, g_hInstance, NULL);
						  SetFocus(hEdit);
						  //Создание многострочного редактора
						  hEdit = CreateWindow(TEXT("edit"),
							  TEXT("Нажмите левую клавишу мыши над рабочей областью"),
							  WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE,
							  20, 40, 500, 500,
							  hWnd, (HMENU)ID_EDIT, g_hInstance, NULL);
						  SetFocus(hEdit);
						  ShowWindow(hEdit, SW_HIDE);//скрыть многострочный редактор
						  break;

		}
		case WM_LBUTTONDOWN:
		{
								ShowWindow(hEdit, SW_HIDE);//скрыть многострочный редактор
								ShowWindow(hButton, SW_RESTORE);//восстановить кнопку
								break;
		}
		case WM_RBUTTONDOWN:
		{
							   ShowWindow(hEdit, SW_RESTORE);//восстановить многострочный редактор
							   ShowWindow(hButton,SW_HIDE );//скрыть кнопку
								   break;	
		}
		case WM_DESTROY:
		{
						   PostQuitMessage( 0 );
						   return 0;
		}
		default: return(DefWindowProc(hWnd, msg, wParam, lParam));
		}
		return FALSE;
	} while (1);
}

Последний раз редактировалось Stilet; 05.10.2015 в 17:35.
165salavei вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не хочет отображаться кнопка !!! Neketek Visual C++ 4 07.05.2012 23:10
Сайт перестал отображаться Nikirinka HTML и CSS 2 07.11.2011 13:47
Заставить иконку в трее постоянно отображаться kangreon Общие вопросы Delphi 5 12.09.2011 07:58
в коммоненте LISTBOX должны отображаться MP3 файлы blackstersl Общие вопросы Delphi 6 26.08.2008 16:31