Страница 1 из 1

Проблема посылки сообщения окну

Добавлено: 07 мар 2008, 20:47
engine
Мне нужно чтоб процедура ReDraw вызывалась в любое свободное время работы программы. Делаю я это так:

Код: Выделить всё

INT_PTR WINAPI DlgProcShow(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{
	switch (uMsg) 
	{
	case WM_INITDIALOG:
		{
                      ...
                      SendMessage(hwnd,WM_COMMAND,NULL,NULL);
		}
		break;
        case WM_COMMAND:
         	ReDraw(hwnd);                
                break;
        ...
	}
	return 0;
}


void ReDraw(HWND hwnd)
{
                ...
		SendMessage(hwnd,WM_COMMAND,NULL,NULL);
}
При этом коде ReDraw не вызывается ни разу.

Re: Проблема посылки сообщения окну

Добавлено: 07 мар 2008, 21:16
WinMain
Бред какой-то...

Re: Проблема посылки сообщения окну

Добавлено: 07 мар 2008, 21:57
engine
Программа выводит в диалоговое окно надписи каждые 2 секунды и при этом следит за нажатием на кнопку F1. Вот процедура ReDraw как раз выводит эти надписи. Я бы мог реализовать это с помощью цикла, но тогда следить за нажатием клавиш не получилось бы.

Re: Проблема посылки сообщения окну

Добавлено: 10 мар 2008, 09:53
ssDev
Вобщето это делается на сообщение WM_TIME или с помощью таймера.
Но если делать как ты то уж лудьше ты бы посадил эту функцию в цикл обработки сообщений GetMeaasge

Re: Проблема посылки сообщения окну

Добавлено: 10 мар 2008, 13:54
engine
Но если делать как ты то уж лудьше ты бы посадил эту функцию в цикл обработки сообщений GetMeaasge
Да спасибо, я уже так сделал

Re: Проблема посылки сообщения окну

Добавлено: 12 мар 2008, 18:08
WinMain
Я обычно по-другому делаю:

Код: Выделить всё

case WM_PAINT :
{
  PAINTSTRUCT ps;
  HDC hdc = ::BeginPaint(hWnd, &ps);
  // Выполняется отрисовка клиентской области окна...
  // TODO: . . . . . . . . . . . . . . . . . . . . . .
  ::EndPaint(hWnd, &ps);
  // Перерисовка окна...
  ::InvalidateRect(hWnd, NULL, FALSE);
}
break;