WM_CREATE似乎没有在子窗口中处理

时间:2013-12-12 02:30:57

标签: c++ winapi

我有一个窗口HWND assignWnd,它是主窗口的子窗口。此窗口似乎不处理WM_CREATE消息。例如,这是我的窗口过程中的WM_CREATE消息。

case WM_CREATE:
    {
        hdc = GetDC(assignWnd);

        GetTextMetrics(assignWnd,&tm);
        cyChar = tm.tmHeight + tm.tmExternalLeading;

        ReleaseDC(assignWnd,hdc);
        return 0;
    }

变量cyCharint,并在窗口过程中声明。稍后将在WM_PAINT消息中使用它。每当我编译程序时,我都会收到运行时错误,指出cyChar在初始化之前正在使用。但是,如果我将上述代码放在WM_PAINT消息中,程序将按预期工作。

显而易见的问题是,我不希望每次绘制窗口时都会进行这些调用。我希望在WM_CREATE消息期间处理这些命令(以及其他命令)。

非常感谢有关在此子窗口中未处理WM_CREATE消息的原因的任何解释。

1 个答案:

答案 0 :(得分:1)

据推测,cyChar是窗口过程的本地。这不是WM_CREATE未被处理的问题,而是cyChar中分配的WM_CREATE与您在cyChar中使用的WM_PAINT不同。您需要将变量设置为全局变量或静态变量,以便从一次调用窗口过程到另一次调用。