2 chenyonken chenyonken 于 2016.02.21 01:06 提问

窗口类应用程序已经编译成功,为什么显示一直在连接,就是没有界面出来,是什么问题
 #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;//结束整个函数
}

图片说明

4个回答

caozhy
caozhy   Ds   Rxr 2016.02.21 07:00

代码是从哪里来的,如果是赋值粘贴来的,
wndcls.hCursor =LoadCursor(NULL,IDI_ERROR);
这里提到的那个图标资源,你的程序有么?

建议你用VC++的模板创建一个win32程序,再在它的基础上修改。

chenyonken
chenyonken 创建win32程序是指创建win32 application工程是吗?是的话我已经创建了
接近 2 年之前 回复
chenyonken
chenyonken 资源不是系统自动给的吗
接近 2 年之前 回复
chenyonken
chenyonken 我自己直接打出来的,已经创建了win32程序
接近 2 年之前 回复
oyljerry
oyljerry   Ds   Rxr 2016.02.21 08:13

vc rebuild重新编译。然后vc打一下sp

chenyonken
chenyonken 什么叫打一下sp?
接近 2 年之前 回复
zuishikonghuan
zuishikonghuan   2016.02.21 11:46

删除中间文件重新编译,建议直接新建一个win32应用,里面有创建窗口的代码

chenyonken
chenyonken 我已经新建了很多次win32应用了,是win32 application咯
接近 2 年之前 回复
qq_34052755
qq_34052755   2016.02.23 11:16

vc rebuild重新编译。然后vc打一下sp

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!