Как отправить сообщение - PullRequest
       33

Как отправить сообщение

2 голосов
/ 13 февраля 2011

У меня проблема.Я хочу, чтобы в моей программе (следуйте коду) было 2 окна: консоль и пустая форма для вывода графики.А из моего главного сообщения отправляю сообщения в форму для рисования фигур.Ввод данных в консоль.Но func SendMessage () не работает.Что не так?

int main()
{
 char szClassName[] = "CG_WAPI_Template";
 HWND hWnd = GetConsoleWindow();
 HINSTANCE hInstance = NULL;
 MSG lpMsg;

 if(!AllocConsole())
  MessageBox(NULL, "Failed to create the console!", "Ошибка", MB_ICONEXCLAMATION|MB_OK);

  void *h_inc = GetStdHandle(STD_INPUT_HANDLE);
  void *h_out = GetStdHandle(STD_OUTPUT_HANDLE);

  WNDCLASS wc;
 /*wc.style       = CS_HREDRAW | CS_VREDRAW;
 wc.lpfnWndProc   = WndProc;
 ...
*/


 if(!RegisterClass(&wc))
 {MessageBox(NULL, "Не могу зарегистрировать класс окна!", "Ошибка", MB_OK);
  return 0;
 }

 hWnd = CreateWindow(...); 

 ShowWindow(hWnd, SW_MAXIMIZE); 
 UpdateWindow(hWnd);

 char buf[2];
 unsigned long lengh;
 ReadConsole(h_inc,buf,1,&lengh,NULL);

 SendMessage(hWnd, WM_USER+2, 0, 0); 

 if(GetMessage(&lpMsg, NULL, 0, 0))  
 {
  TranslateMessage(&lpMsg);
  DispatchMessage(&lpMsg);
 }

 ReadConsole(h_inc,buf,1,&lengh,NULL);

 if (!FreeConsole())
  MessageBox(NULL, "Could not free the console!", "Ошибка", MB_OK);

 return 0;
}

Спасибо.

1 Ответ

1 голос
/ 13 февраля 2011

Функция SendMessage не возвращается, пока сообщение не будет обработано окном. Вам нужно иметь цикл обработки событий для обработки сообщений. Смотрите учебник здесь .

В вашем цикле обработки событий вам придется обрабатывать сообщения для двух окон: для окна консоли и для окна с графическим интерфейсом. Для сообщений консоли вам нужно обработать события нажатия клавиш и отправить свое пользовательское сообщение (WM_USER + X) в окно графического интерфейса.

...