У меня есть окно HWND assignWnd
, являющееся дочерним окном главного окна. Это окно, похоже, не обрабатывает сообщение WM_CREATE. Например, вот сообщение WM_CREATE в моей оконной процедуре.WM_CREATE, похоже, не обрабатывается в дочернем окне
case WM_CREATE:
{
hdc = GetDC(assignWnd);
GetTextMetrics(assignWnd,&tm);
cyChar = tm.tmHeight + tm.tmExternalLeading;
ReleaseDC(assignWnd,hdc);
return 0;
}
Переменная cyChar
является int
и объявляется в оконной процедуре. Он используется позже в сообщении WM_PAINT. Всякий раз, когда я компилирую программу, я получаю ошибку времени выполнения, указывающую, что cyChar
используется до его инициализации. Если я помещаю вышеуказанный код в сообщение WM_PAINT, программа работает так, как ожидалось.
Очевидная проблема заключается в том, что я не хочу, чтобы эти вызовы выполнялись каждый раз, когда окно окрашивается. Я бы хотел, чтобы эти команды (и другие позже) обрабатывались во время сообщения WM_CREATE.
Любое объяснение того, почему сообщение WM_CREATE не обрабатывается в этом дочернем окне, должно быть оценено по достоинству.
Nevermind. Я обнаружил, что проблема заключается в том, что «cyChar» не был объявлен статическим, поэтому он недействителен для других сообщений. –
Если это было частью вашего цикла обработки сообщений, не имело бы значения, было ли оно статичным или нет, поскольку код никогда не покидает цикл. Статические переменные следует избегать, когда это возможно. –
Марк, я объявил это в процедуре окна и перед коммутатором (msg), используемым для обработки различных сообщений. Кроме того, из любопытства, почему вы рекомендуете избегать статических переменных? –