zoukankan      html  css  js  c++  java
  • WinMain

    操作系统是通过消息机制(Message)来实现的。操作系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序,参看MSDN。
    MSG结构定义如下:
    typedef struct tagMSG {      
         HWND   hwnd;     
         UINT   message;
         WPARAM wParam;
         LPARAM lParam;
         DWORD  time;
         POINT  pt;
    } MSG;
    句柄(HANDLE),资源的标识。
    操作系统要管理和操作这些资源,都是通过句柄来找到对应的资源。按资源的类型,又可将句柄细分成图标句柄(HICON),光标句柄(HCURSOR),窗口句柄(HWND),应用程序实例句柄(HINSTANCE)等等各种类型的句柄。操作系统给每一个窗口指定的一个唯一的标识号即窗口句柄。

    Windows程序的入口函数
    int WINAPI WinMain(
      HINSTANCE hInstance,      // handle to current instance
      HINSTANCE hPrevInstance,  // handle to previous instance
      LPSTR lpCmdLine,          // command line
      int nCmdShow              // show state
    );


    创建一个完整的窗口需要经过下面四个操作步骤:
    设计一个窗口类;
    注册窗口类;
    创建窗口;
    显示及更新窗口。


    typedef struct _WNDCLASS {
       UINT     style;
       WNDPROC lpfnWndProc;
       int      cbClsExtra;
       int      cbWndExtra;
       HANDLE  hInstance;
       HICON    hIcon;
       HCURSOR  hCursor;
       HBRUSH   hbrBackground;
       LPCTSTR  lpszMenuName;
       LPCTSTR  lpszClassName; 
    } WNDCLASS;

    #include <windows.h>
    #include <stdio.h>

    LRESULT CALLBACK WinSunProc(
      HWND hwnd,      // handle to window
      UINT uMsg,      // message identifier
      WPARAM wParam,  // first message parameter
      LPARAM lParam   // second message parameter
    );

    int WINAPI WinMain(
      HINSTANCE hInstance,      // handle to current instance
      HINSTANCE hPrevInstance,  // handle to previous instance
      LPSTR lpCmdLine,          // command line
      int nCmdShow              // show state
    )
    {
     WNDCLASS wndcls;
     wndcls.cbClsExtra=0;
     wndcls.cbWndExtra=0;
     wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
     wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
     wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
     wndcls.hInstance=hInstance;
     wndcls.lpfnWndProc=WinSunProc;
     wndcls.lpszClassName="Weixin2003";
     wndcls.lpszMenuName=NULL;
     wndcls.style=CS_HREDRAW | CS_VREDRAW;
     RegisterClass(&wndcls);

     HWND hwnd;
     hwnd=CreateWindow("Weixin2003","北京维新科学技术培训中心",WS_OVERLAPPEDWINDOW,
      0,0,600,400,NULL,NULL,hInstance,NULL);

     ShowWindow(hwnd,SW_SHOWNORMAL);
     UpdateWindow(hwnd);

     MSG msg;
     while(GetMessage(&msg,NULL,0,0))
     {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
     }
     return 0;
    }

    LRESULT CALLBACK WinSunProc(
      HWND hwnd,      // handle to window
      UINT uMsg,      // message identifier
      WPARAM wParam,  // first message parameter
      LPARAM lParam   // second message parameter
    )
    {
     switch(uMsg)
     {
     case WM_CHAR:
      char szChar[20];
      sprintf(szChar,"char is %d",wParam);
      MessageBox(hwnd,szChar,"weixin",0);
      break;
     case WM_LBUTTONDOWN:
      MessageBox(hwnd,"mouse clicked","weixin",0);
      HDC hdc;
      hdc=GetDC(hwnd);
      TextOut(hdc,0,50,"计算机编程语言培训",strlen("计算机编程语言培训"));
      ReleaseDC(hwnd,hdc);
      break;
     case WM_PAINT:
      HDC hDC;
      PAINTSTRUCT ps;
      hDC=BeginPaint(hwnd,&ps);
      TextOut(hDC,0,0,"维新培训",strlen("维新培训"));
      EndPaint(hwnd,&ps);
      break;
     case WM_CLOSE:
      if(IDYES==MessageBox(hwnd,"是否真的结束?","weixin",MB_YESNO))
      {
       DestroyWindow(hwnd);
      }
      break;
     case WM_DESTROY:
      PostQuitMessage(0);
      break;
     default:
      return DefWindowProc(hwnd,uMsg,wParam,lParam);
     }
     return 0;
    }

  • 相关阅读:
    自动装配有哪些局限性?
    zk 节点宕机如何处理?
    Zookeeper 的 java 客户端都有哪些?
    BeanFactory – BeanFactory 实现举例?
    Spring 配置文件?
    什么是 Spring IOC 容器?
    Spring 框架中的单例 bean 是线程安全的吗?
    ApplicationContext 通常的实现是什么?
    什么是通知Advice?
    spring 支持哪些 ORM 框架?
  • 原文地址:https://www.cnblogs.com/jcomet/p/1406383.html
Copyright © 2011-2022 走看看