回 帖 发 新 帖 刷新版面

主题:创建按钮的代码,放在WinMain中成功,但放在WM_CREATE中失败!

    hButton=CreateWindowEx(NULL,"Button","My Button",WS_CHILD | WS_VISIBLE,
        100,50,100,40,hWinMain,ID_Button,hModule,NULL);

    hEdit=CreateWindowEx(NULL,"Edit","My Edit",WS_CHILD | WS_VISIBLE,
        300,150,100,40,hWinMain,ID_Edit,hModule,NULL);

上面这两段代码放在WinMain中成功,但放在窗口处理过程的WM_CREATE消息中却失败了.
为什么?/

我的全局变量是这样定义的:
HMENU ID_Button=(HMENU)1,ID_Edit=(HMENU)2;

hModule和hWinMain分别是类和主窗体的句柄,也是全局变量.

回复列表 (共4个回复)

沙发

不能和窗口创建一起进行,因为那个时候窗口还没创建好呢,你的按钮自然创建失败.
最好在其他窗口已经好了的地方

板凳

CreateWindowEx()该函数最后一个参数不能为空,为创建参数,用以初始化窗口数据,这个参数将作为WM_CREATE消息的附加参数,而交给窗口函数进行处理,这样用户就可以在窗口函数中根据这个参数值来动态地初始化窗口,它一般用在多文档的应用程序中,若该值为NULL,表示没有附加参数

3 楼

HMENU ID_Button=(HMENU)1,ID_Edit=(HMENU)2;?

我一般是这样做的
#define ID_BUTTON 1;
在WndProc()函数里写
WndProc(.....)
{
   static HWND hButton;

   switch (uMsg)
    {
               case WM_CREATE:
                  hButton = CreateWindow("Button","My Button",WS_CHILD |                                       WS_VISIBLE | BS_PUSHBUTTON,
                                         100,100,50,50,hwnd,(HMENU)ID_Button,((LPCREATESTRUCT)lParam)->hInstance,NULL)
     }
}

4 楼

参数多了吧

我来回复

您尚未登录,请登录后再回复。点此登录或注册