为什么RegisterClass不能成功
编号:QA004020
建立日期: 2001年3月22日 最后修改日期:2001年3月22日
所属类别:
张某:
操作系统: win98
编程工具: vc++6.0
问题: 为更好得学习MFC,我正在学习WIN32 API我建立了一个WIN32小程序(New-->Win32 Application-->an empty project)接着new-->C++ source file并敲进如下程序,编译后没有错误,可执行时什么也没出现。
请各路高手帮帮忙,给我的程序诊断一下。
我用的是VC++6.0
全部程序如下:
#include<windows.h>
#include<string.h>
#include<stdio.h>
LRESULT CALLBACK WindowFunc(HWND,UINT,WPARAM,LPARAM);
char szWinName[]="MyWin";
char str[255]="";
int WINAPI WinMain(HINSTANCE hThisInst,HINSTANCE hPreInst,LPSTR lpszArgs,INT nWinMode)
{HWND hwnd;
MSG msg;
WNDCLASSEX wcl;
wcl.cbSize=sizeof(WNDCLASSEX);
wcl.style=0;
wcl.lpfnWndProc=WindowFunc;
wcl.cbClsExtra=0;
wcl.cbWndExtra=0;
wcl.hInstance=hThisInst;
wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wcl.hIconSm=LoadIcon(NULL,IDI_WINLOGO);
wcl.hCursor=LoadCursor(NULL,IDC_ARROW);
wcl.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//此处用到了类型强制转换
wcl.lpszMenuName=NULL;
wcl.lpszClassName=szWinName;
if(!RegisterClass((const struct tagWNDCLASSA *)&wcl)) return 0;
hwnd=CreateWindow(
szWinName,//窗口类名
"Processing WM_CHAR Message",//窗口标题
WS_OVERLAPPEDWINDOW,//窗口风格
CW_USEDEFAULT,//初始x坐标
CW_USEDEFAULT,//初始y坐标
CW_USEDEFAULT,//初始宽度
CW_USEDEFAULT,//初始高度
HWND_DESKTOP,//父窗口句柄
NULL,//窗口菜单句柄
hThisInst,//程序当前句柄
NULL);//创建参数
ShowWindow(hwnd,nWinMode);//显示窗口
UpdateWindow(hwnd);//刷新窗口用户区
while(GetMessage(&msg,NULL,0,0))//创建消息循环
{
TranslateMessage(&msg);//翻译键盘消息
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WindowFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
switch(message)
{
case WM_CHAR:
hdc=GetDC(hwnd);
TextOut(hdc,1,1,"",3);
sprintf(str,"%c",(char)wParam);
TextOut(hdc,1,1,str,strlen(str));
ReleaseDC(hwnd,hdc);
break;
case WM_DESTROY://关闭窗口
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
水平: 刚入门
回答:
既然你使用WNDCLASSEX结构来定义窗口类,当然不能使用RegisterClass,而应该使用RegisterClassEx。
if(!RegisterClassEx((WNDCLASSEX *)&wcl))
return 0;
其实如果你使用单步跟踪的话,很容易找到这个错误。
此问题由李海回答。
| |
|
|
| |
|
|