none
一个用API创建窗口的问题 RRS feed

  • 问题

  • #include <windows.h>
    LRESULT WINAPI WindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);

    //插入Winmain代码
    int WINAPI WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)  //申明一个调用WINAPI的程序主函数,并申明形参
    {
     WNDCLASSEX WindowClass;                               //创建一个“WIN窗口类-WNDCLASSEX”的变量,以便后面给该变量参数覆值
     MSG msg;
     WindowClass.cbSize=sizeof(WNDCLASSEX);
     WindowClass.style=CS_HREDRAW|CS_VREDRAW;                      //告诉WIN如果窗口宽度或者高度改变,都重图窗口图像,可以只定义一个
     WindowClass.lpfnWndProc=WindowProc;                           //指向程序中处理消息的函数的指针,windowProc就是本程序的消息处理函数
     WindowClass.cbClsExtra=0;                                    //请求WINdows提供额外空间,可能就是内存吧,设0就是不需要 
     WindowClass.cbWndExtra=0;                                     //请求WINdows提供额外空间,可能就是内存吧,设0就是不需要 
     WindowClass.hInstance =hInstance;      //这个成员容纳当前程序实例句柄
     WindowClass.hIcon=LoadIcon(0,IDI_APPLICATION);   //定义最小化时的图标
     WindowClass.hCursor=LoadCursor(0,IDC_ARROW);   //定义窗口使用的光标
     WindowClass.hbrBackground=static_cast<HBRUSH>(GetStockObject(GRAY_BRUSH));   //窗口客户区的背景色
      WindowClass.lpszMenuName=0;   //定义窗口菜单资源名称,如果没有菜单,则应设为0
     WindowClass.lpszClassName =szAppName;     //设置本窗口类的名称变量,在创建窗口时会用到
     static LPCTSTR szAppName=L"OFWin";   //
     WindowClass.hIconSm =0;         //标识某个与该窗口类相联系的小图标,如果设置为空,则WINDows将搜索hIcon相关的小图标并使用
     RegisterClassEx(&WindowClass);  //注册窗口类,WinClass就是上面提到的窗口变量名称
     HWND hWnd;                //定义窗口的句柄变量
     hWnd=CreateWindow(szAppName,         //设置在WINdows(句柄)上创建一个窗口, 并返回窗口句柄到窗口句柄变量 //第一个实参,窗口类的名称         
      L"A Basic WINdow the Hard Way",   //设置本窗口显示的标题
      WS_OVERLAPPEDWINDOW,    //创建窗口样式,这个实参代表一个主应用程序的窗口样式,包括菜单项和标题栏,最大化最小化等等样式
      CW_USEDEFAULT,     //设置窗口左上角横坐标,这个常量表示让WINdows分配
      CW_USEDEFAULT,    //设置窗口左上角纵坐标,这个常量表示让WINdows分配
      CW_USEDEFAULT,   //设置窗口宽度,这个常量表示让WINdows分配
      CW_USEDEFAULT,  //设置窗口高度,这个常量表示让WINdows分配
      0,    //0表明被创建的窗口不是子窗口,如果希望是子窗口,则应当将该参数设置为父窗口的句柄
      0,    //0表明不需要菜单
      hInstance,    //当前程序实例句柄
      0     //表示窗口创建数据的实参是0,如果要创建多文档界面,则应当指向某个与此相关的结构
      );
     ShowWindow(hWnd,nCmdShow);   //创建窗口后,要用这个API把窗口显示出来
     UpdateWindow(hWnd);      //调用API请求WINDows重画窗口
     while(GetMessage(&msg,0,0,0)==TRUE)   
     {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
     }
     return static_cast<int>(msg.wParam);
    }

    //消息处理函数
    LRESULT WINAPI WindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
    {
     HDC hDC;
     PAINTSTRUCT PaintSt;
     RECT aRect;
     switch(message)
     {
     case WM_PAINT:
       hDC=BeginPaint(hWnd,&PaintSt);
       GetClientRect(hWnd,&aRect);
       SetBkMode(hDC,TRANSPARENT);
       DrawText(
        hDC,
        L"But ,soft!What light through yonder window breaks?",
        -1,
        &aRect,
        DT_SINGLELINE|
        DT_CENTER|
        DT_VCENTER);
       EndPaint(hWnd,&PaintSt);
       return 0;
     case WM_DESTROY:
      PostQuitMessage(0);
      return 0;
     default:
      return DefWindowProc(hWnd,message,wParam,lParam);
     }
    }

     

     

    2010年3月14日 15:55

答案

  • 或者你把下面两行调换一下位置:
     WindowClass.lpszClassName =szAppName;     //设置本窗口类的名称变量,在创建窗口时会用到
     static LPCTSTR szAppName=L"OFWin";  
    • 已标记为答案 Nancy Shao 2010年3月23日 1:45
    2010年3月14日 23:12
    版主

全部回复

  • 为什么编译说ex12_01.cpp(19) : error C2065: “szAppName”: 未声明的标识符
    本来可以运行的,后来查了好久的注译,就不能编译了


    还有哪个老大能帮忙简单注译一下还没注译的语句吗,看了好久了,12点了,头都大了。
    2010年3月14日 15:58
  • 或者你把下面两行调换一下位置:
     WindowClass.lpszClassName =szAppName;     //设置本窗口类的名称变量,在创建窗口时会用到
     static LPCTSTR szAppName=L"OFWin";  
    • 已标记为答案 Nancy Shao 2010年3月23日 1:45
    2010年3月14日 23:12
    版主
  • 谢谢版主指出,当时输入完后,自己调整了下位置

    2010年3月15日 12:31