跪求lpszClassName不解

Silenceboyyu 2010-05-24 11:44:19
#include<windows.h>
//声明窗口函数原型
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
//--------------------------------------------------------------------------
//主函数
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd)
{
HWND hwnd;
MSG msg;
char lpszClassName[]="窗口";
WNDCLASS wc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hInstance=hInstance;
wc.lpfnWndProc =WndProc;
wc.lpszClassName=lpszClassName;
wc.lpszMenuName=NULL;
wc.style=0;

RegisterClass(&wc);

WNDCLASS wcc;
wcc.cbClsExtra=0;
wcc.cbWndExtra=0;
wcc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
wcc.hCursor=LoadCursor(NULL,IDC_ARROW);
wcc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wcc.hInstance=hInstance;
wcc.lpfnWndProc =WndProc;
wcc.lpszClassName=lpszClassName;
wcc.lpszMenuName=NULL;
wcc.style=0;

RegisterClass(&wcc);

hwnd=CreateWindow(lpszClassName,
"Window",
WS_OVERLAPPEDWINDOW,
120,50,800,600,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hwnd,nShowCmd);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

//处理信息的窗口函数

LRESULT CALLBACK WndProc(HWND hwnd,UINT message, WPARAM wParam, LPARAM lParam)
{
......//此处代码略
}



请问:
已知,lpszClassName用于窗口注册的标示,即,窗口通过此来找到创建时所属的窗口类型。但是,假如定义了两个WNDCLASS 结构体类型(wc和wcc),
且二者的成员lpszClassName都为数组lpszClassName的值,即“窗口”,然而wc和wcc的内容并非完全一样,在CreateWindow()函数中,第一个参数都为数组lpszClassName的值,
即新建的窗口通过lpszClassName来找他的窗口类型,而此处两个不同的窗口类型却用了相同的标识,请问窗口时怎样识别的,是按wc呢还是wcc呢???
...全文
380 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wltg2001 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 silenceboyyu 的回复:]
不好意思呀,忘说了,代码执行没有问题,程序正常运行,只是hwnd用的是wc这个注册类(窗口显示的是白色而不是灰色),即,非wcc。wc肯定注册成功,但是怎样测试wcc是否注册成功却不知道了。求解释!
[/Quote]
程序执行没有问题不代表你上面的所有的API都调用成功了。测试wcc是否注册成功可以看RegisterClass的返回值。
向立天 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 silenceboyyu 的回复:]
不好意思呀,忘说了,代码执行没有问题,程序正常运行,只是hwnd用的是wc这个注册类(窗口显示的是白色而不是灰色),即,非wcc。wc肯定注册成功,但是怎样测试wcc是否注册成功却不知道了。求解释!
[/Quote]
RegisterClass函数是有返回值的
fishion 2010-05-25
  • 打赏
  • 举报
回复
if(!RegisterClass(&wc))
//fail
Silenceboyyu 2010-05-25
  • 打赏
  • 举报
回复
不好意思呀,忘说了,代码执行没有问题,程序正常运行,只是hwnd用的是wc这个注册类(窗口显示的是白色而不是灰色),即,非wcc。wc肯定注册成功,但是怎样测试wcc是否注册成功却不知道了。求解释!
向立天 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wltg2001 的回复:]
不好意思,看漏了,你上面的代码调用了RegisterClass(&wcc);不过由于窗口类名为“窗口”的窗口类在本进程已经存在了,所以RegisterClass(&wcc);可能会失败。
[/Quote]
对呀
你试试能注册么
wltg2001 2010-05-24
  • 打赏
  • 举报
回复
不好意思,看漏了,你上面的代码调用了RegisterClass(&wcc);不过由于窗口类名为“窗口”的窗口类在本进程已经存在了,所以RegisterClass(&wcc);可能会失败。
wltg2001 2010-05-24
  • 打赏
  • 举报
回复
你上面的代码不会出现这个问题啊,因为你并没有对wcc调用RegisterClass(&wcc);啊。
另外,即使你调用RegisterClass(&wcc);因为已经本进程内已经有了一个窗口类名为“窗口中”的窗口类了,所以对wcc的注册可能会失败。所以不会出现你后面提出的问题。
Eleven 2010-05-24
  • 打赏
  • 举报
回复
RegisterClass(&wcc);看看你注册成功了吗?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧