Почему WNDCLASS (Windows-C) настроен и используется так? - PullRequest
0 голосов
/ 06 февраля 2011

При создании окна:

1) Почему мы должны зарегистрировать класс окна и как CreateWindow понимает наш желаемый класс?

WNDCLASS wc;
RegisterClass(&wc)

2) Почему мы должны использовать эту петлю:

MSG msg;
While(GetMessage(&msg,0,0,0))
{
    TranslateMessage(&msg);
    DispathMessage(&msg);
}

При запуске сообщения отсутствуют, поэтому мы не войдем в цикл и выйдем из функции WinMain.

Ответы [ 3 ]

7 голосов
/ 06 февраля 2011

Вы регистрируете класс окна, потому что так работает система.Думайте об этом как об определении типа.GetMessage блокируется до тех пор, пока в очередь не поступит сообщение.

Вам действительно нужно прочитать книгу Чарльза Петцольда, Программирование Windows

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

В принципе, когда ваша программа запускается, вы говорите Windows, что ваше окно / программа готово принимать сообщения - то есть регистрирует ее.После этого в цикле сообщений происходит взаимодействие с пользователем (и системой).Каждый раз, когда требуется какое-либо взаимодействие, оно передается приложению через сообщение (или событие).В вашем цикле сообщений вы определяете поведение, как реагировать на различные сообщения.

Помимо сообщений пользовательского интерфейса существуют другие сообщения, такие как событие таймера или сообщения, связанные с системой.С ними также можно справиться.

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

Вы делаете неправильное предположение о GetMessage. Вы утверждаете, что если нет сообщения «мы не войдем в цикл». Это означает, что вы предполагаете, GetMessage возвращает false, если сообщения нет.

На самом деле, GetMessage возвращает false только при наличии сообщения WM_QUIT. Если сообщения нет, GetMessage не возвращает . Он просто ждет, пока сообщение не придет. Это имеет большой смысл для многих программ. Если нет ввода, делать нечего, и вашей программе не требуется процессорное время.

Некоторым программам периодически требуется некоторое время процессора. Вот почему они используют WM_TIMER: так что GetMessage возвращает управление вашему коду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...