问题描述
- 窗口类应用程序已经编译成功,为什么显示一直在连接,就是没有界面出来,是什么问题
-
#include<windows.h> #include<stdio.h> //声明窗口过程函数 LRESULT CALLBACK WinSunProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); //编写WinMain函数 int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )//注意没有冒号 { //设计窗口类,给所有成员赋值 WNDCLASS wndcls;//WNDCLASS 为窗口类名,wndcls为窗口类对象,接下来为WNDCLASS里的每一个成员赋值 wndcls.cbWndExtra =0; wndcls.cbClsExtra=0; wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);//用GetStockObject这个函数从库里选择一个黑色的现成的黑色画刷 wndcls.hCursor =LoadCursor(NULL,IDI_ERROR);//用这个函数从库里获取一个图标,前参数为句柄,后者是句柄类型 wndcls.hInstance =hInstance;//WinMain函数里有个当前应用程序句柄,当调用WinMain函数是,它就会传过来一个应用程序句柄 wndcls.lpfnWndProc =WinSunProc;//将窗口过程函数的名字赋给他,因为函数的名字就是一个指针(地址),注意不是窗口类的名字 wndcls.lpszClassName ="liquanfu2009"; wndcls.lpszMenuName =NULL; wndcls.style =CS_HREDRAW|CS_VREDRAW; //注册窗口类 RegisterClass(&wndcls);//用RegisterClass这个函数注册,将设计的窗口类的对象Wndcls的地址传给这个函数 //创建窗口 HWND hwnd; hwnd=CreateWindow("liquanfu2009","我的窗口",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);//WS_OVERLAPPWDWINDOW是要显示的窗口的样式 //显示窗口 ShowWindow(hwnd,SW_SHOWNORMAL);//SW_SHOWNORMAL是显示的方式 //更新窗口 UpdateWindow(hwnd); //消息循环 MSG msg; while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } /////////////// //窗口过程函数的定义 LRESULT CALLBACK WinSunProc ( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { switch(uMsg) { case WM_CHAR: char szChar[20]; sprintf(szChar,"char code is %d",wParam);//第一个szChar 是指对这个数组进行格式化,然后把WPARAM这个东西格式化它 MessageBox(hwnd,szChar,"char",0);//弹出消息框,有四个参数,这个消息框函数用于输出字符数组的内容输出,由平台SDK提供函数,第一个参数是要显示的窗口句柄,第二个是输出内容,三是消息的标题,四是输出的样式 break; case WM_LBUTTONDOWN://鼠标左键的按下的消息 MessageBox(hwnd,"mouse clicked","message",0); HDC hdc;//用HDC结构体定义一个对象 hdc=GetDC(hwnd);//返回一个HDC对象 TextOut(hdc,0,50,"My window",strlen("My window"));//调用这个函数在窗口输出内容,参数一是HDC对象,二和三是显示的位置,四是内容,五是内容的长度 //获取DC后要释放DC ReleaseDC(hwnd,hdc); break; case WM_PAINT:// HDC hDC;//定义对象 PAINTSTRUCT ps;//定义对象 hDC=BeginPaint(hwnd,&ps);//返回值是hDC,这个函数只能在相应WH_PAINT类消息中使用,和下面的EndPaint配套使用 TextOut(hDC,0,0,"My program",strlen("My program")); EndPaint(hwnd,&ps); case WM_CLOSE://关闭窗口的消息 if(IDYES==MessageBox(hwnd,"do you quit?","message",MB_YESNO))//MB_VESNO提供两个按钮,是和否,返回YES或NO DestroyWindow(hwnd);//当选择确定时消除窗口 break; case WM_DESTROY://退出消息 PostQuitMessage(0);//向应用程序发出退出的消息 break; default://都不是以上的消息类型 return DefWindowProc(hwnd,uMsg,wParam,lParam);//调用默认的窗口过程函数 } return 0;//结束整个函数 }
解决方案
代码是从哪里来的,如果是赋值粘贴来的,
wndcls.hCursor =LoadCursor(NULL,IDI_ERROR);
这里提到的那个图标资源,你的程序有么?
建议你用VC++的模板创建一个win32程序,再在它的基础上修改。
解决方案二:
vc rebuild重新编译。然后vc打一下sp
解决方案三:
删除中间文件重新编译,建议直接新建一个win32应用,里面有创建窗口的代码
解决方案四:
vc rebuild重新编译。然后vc打一下sp
时间: 2024-09-17 02:55:18