此程序本只是通过CreateWindows()函数生成一个标准的windows窗口
(有最大化,最小化按钮,关闭按钮,通过WS_OVERLAPPEDWINDOW参数定义的风
格),可不知怎么原因,执行了下面的return语句:
if (!hWnd)
return 0;
显然,窗口没有创建成功,按F5调试时,不见反应,去掉上面的判断语句,
不见窗口,但程序驻在内存,通过windows任务管理器可看到. 我猜测是wndclass结构体信息填写有问题
新手上路,帮我分析一下.
#include<windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
WNDCLASS wndclass;
HWND hWnd; //填写窗口结构体信息
wndclass.style=CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName="demo"; if (!RegisterClass(&wndclass))//
return 0; hWnd=CreateWindow("demo","a sample",WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
if (!hWnd)
return 0;//每次都执行到这里,也就是说hWnd根本没有创建成
//功
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&msg,NULL,NULL,NULL))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
MessageBox(NULL,"after the main","check",0);//此处只用来检测程序 //是否执行到这里 return (msg.wParam);}
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{ switch(message)
{
case WM_CREATE:
MessageBox(NULL,"sub function","winproc",0);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return 0;
}
解决方案 »
- picture control中的图片实现反转色变化
- 如何去除BASE64算法产生的换行符啊?
- 广交爱好C/C++的大学生朋友,共同学习,共同进步,加QQ:406740872
- 在html文件中 如何 响应 ActiveX 控件的 事件
- 我想在cimagelist中把系统图标和自己程序中的BITMAP图标全部加入进去,以便在同一LISTCTRL中两者都可以显示,如何解决?
- 如何从串口发送文件?
- 请问为什么装了VC后我的Foxmail发不了邮件了!(在线等待)
- 各位大吓!请问今年的程序员考试何时报名?
- 如何利用CLASSWIZARD从CObject类派生一个类?
- 问题之菜,千古罕见!
- 求救:怎样用VC作一个广告发布的课题阿?谢谢!!是否要用到http协议阿?
- 怎样编写会Dock在Shell工具栏的应用程序,像MediaPlayer9最小化后一样。
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_CREATE:
MessageBox(NULL,"sub function","winproc",0);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
{ switch(message)
{
case WM_CREATE:
MessageBox(NULL,"sub function","winproc",0);
break;
case WM_DESTROY:
PostQuitMessage(0);
break; //加
default:
return DefWindowProc(hWnd, message, wParam, lParam); }
return 0;
}
是我把default去掉的. 为什么不加default,hWnd不能注册成功顺便问一个问题,这些疑问我也在vc/mfc基础类问过用SDK大部分要调用API,MFC要用到很多系统自带的类,API与类库到底有什么样的关系?想到书店买一本vc参考书,有:类库参考手册,运行库参考手册,有模板库参考手册,没找到 API ,不知怎么回事
为了完整
建议
switch编程时先加上default再写其他
有没有一本书名叫:<<windows api 参考手册>>?
还有一本书,,好厚!!
价格要在100以上!!
就OK了 !