chenyonken 2016-02-20 17:06 采纳率: 0%
浏览 1981

窗口类应用程序已经编译成功,为什么显示一直在连接,就是没有界面出来,是什么问题

 #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条回答

  • threenewbee 2016-02-20 23:00
    关注

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

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

    评论

报告相同问题?

悬赏问题

  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样