这么简单的程序,为什么始终无法创建窗体?(急!)

lulixuexiVC 2007-04-19 12:04:37
我初学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消息。不知道

是什么原因。请各位指教,多谢多谢!
...全文
155 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Fufay 2007-04-19
你应该发到 C 版面去。
回复
xie_yanke 2007-04-19
JF, 顶.^_________^
回复
相关推荐
发帖
ASP
创建于2007-09-28

2.8w+

社区成员

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