为何创建窗口返回句柄总是为NULL?(急!)

orangebow 2007-04-19 11:56:39
我初学VC,试写了一个小程序,就是用SDK建立一个窗口,但始终不成功。
急盼各位大侠指教!以下是源代码:
#include <windows.h>
#include <stdio.h>

//申明回调函数
LRESULT CALLBACK funFrmMain(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);

//主程序
int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // pointer to command line
int nCmdShow // show state of window
)
{
//定义一个窗口类的实例
WNDCLASS frmMain;

//为窗口类的实例各成员赋值
//窗口类附加参数
frmMain.cbClsExtra = 0;
//窗口附加参数
frmMain.cbWndExtra = 0;
//设置窗口背景(或者称为选择窗口画刷)
frmMain.hbrBackground =(HBRUSH)GetStockObject(BLACK_BRUSH);
//窗口鼠标指针
frmMain.hCursor = LoadCursor(NULL,IDC_ARROW);
//设置窗口图标
frmMain.hIcon = LoadIcon(NULL,IDI_APPLICATION);
//为窗口句柄赋值
frmMain.hInstance = hInstance;
//设置窗口回调函数
frmMain.lpfnWndProc = funFrmMain;
//设置此窗口类的注册名
frmMain.lpszClassName = "chenming";
//设置窗口菜单名
frmMain.lpszMenuName = NULL;
//设置窗口风格
frmMain.style = CS_HREDRAW | CS_VREDRAW;

//注册上面编写的窗口类
if (!RegisterClass(&frmMain)) return FALSE;

//定义窗口句柄
HWND frmMainHwnd;

//创建窗口
frmMainHwnd=CreateWindow("chenming","ll",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
if (NULL==frmMainHwnd) return FALSE;
//显示窗口
int j=ShowWindow(frmMainHwnd,SW_SHOWNORMAL);

//刷新窗口
UpdateWindow(frmMainHwnd);

//接下来处理消息
//定义消息传递对象
MSG msg;

//用一个循环不断的进行消息获取
while(GetMessage(&msg,NULL,0,0))
{
//进行消息转换
TranslateMessage(&msg);
//将消息交给回调函数处理
DispatchMessage(&msg);
}

//退出程序
return 0;
}

//回调函数处理
LRESULT CALLBACK funFrmMain(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
//窗口绘制事件
switch(uMsg)
{
case WM_PAINT:
HDC hdc;
PAINTSTRUCT ps;
//取得绘图设备索引值
hdc=BeginPaint(hwnd,&ps);
//在窗口上输出文字
TextOut(hdc,0,0,"第一个SDK程序",strlen("第一个SDK程序"));
//结束绘图
EndPaint(hwnd,&ps);
break;

case WM_LBUTTONDBLCLK:
MessageBox(hwnd,"鼠标点击","Message",MB_OK);
break;

case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"是否真的退出?","Message",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;

case WM_DESTROY:
PostQuitMessage(0);
break;

default:
LRESULT x=DefWindowProc(hwnd,uMsg,wParam,wParam);
return x;
}

return 0;
}

在createwindow返回的值总是为NULL。调试时在LRESULT x=DefWindowProc(hwnd,uMsg,wParam,wParam);处设置断点,发现会收到WM_NCDESTROY消息。不知道是什么原因。请各位指教,多谢多谢!
...全文
293 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
orangebow 2007-04-28
我自己找到了原因:LRESULT x=DefWindowProc(hwnd,uMsg,wParam,wParam)的参数写错了,最后一个参数应该是lParam。唉,手误,手误!
回复
xie_yanke 2007-04-19
JF, 顶.^_________^
回复
wangwm 2007-04-19
lZ发错地方了,发到c版去吧
回复
freejanker 2007-04-19
错了,也要顶
回复
相关推荐
发帖
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
帖子事件
创建了帖子
2007-04-19 11:56
社区公告
暂无公告