1. 程式人生 > >Win32API全局窗口類的註冊與創建

Win32API全局窗口類的註冊與創建

zcl icon 全局 class border 字符 rbac 標題 def

Win32API全局窗口類的註冊
  • 應用程序全局窗口類的註冊
    • typedef struct tagWNDCLASSEX {
      • UINT cbSize; //結構體的大小,用sizeof得出
      • UINT style; //窗口類的風格,默認設置左右畫出
      • WNDPROC lpfnWndProc; //回調函數,窗口處理函數,幹活的人
      • int cbClsExtra; //窗口類的附加數據Buff的大小
      • int cbWndExtra; //窗口的附加數據Buff的大小
      • HINSTANCE hInstance; //當前模塊的實例句柄
      • HICON hIcon; //
        窗口圖標句柄
      • HCURSOR hCursor; //鼠標的句柄
      • HBRUSH hbrBackground; //繪制窗口背景的畫刷句柄
      • LPCTSTR lpszMenuName; //窗口菜單的資源ID字符串
      • LPCTSTR lpszClassName; //窗口類的名稱
      • HICON hIconSm; //窗口的小圖標句柄
    • } WNDCLASSEX, *PWNDCLASSEX;
  • 全局窗口類註冊,要在風格中增加CS_GLOBALCLASS,局部的窗口類則不添加此風格參數
    例如: WNDCLASSEX wcex = {0}; wcex.stle = ... | CS_GLOBALCLASS;

Win32API CreateWindow
  • HWND CreateWindowEx( DWORD dwExStyle, //窗口的擴展風格 LPCTSTR lpClassName, //已經註冊的窗口類名稱 LPCTSTR lpWindowName, //窗口標題欄名字 DWORD dwStyle, //窗口的基本風格 int x, //窗口左上角水平坐標位置 int y, //窗口左上角垂直坐標位置 int nWidth, //窗口的寬度 int nHeight, //窗口的高度 HWND hWndParent, //窗口的父窗口句柄 HMENU hMenu, //
    窗口菜單句柄 HINSTANCE hInstance, //應用程序實例句柄 LPVOID lpParam //窗口創建時附加參數 );
  • 子窗口的創建
    • 創建時要設置父窗口句柄
    • 創建風格要增加WS_CHILD|WS_VISIBLE

Win32API 創建窗口類的查找過程
  • 1 根據傳入的ClassName,在局部窗口類中查找,
    • 找到執行2
    • 未找到執行3
  • 2 比較局部窗口類與創建時傳入的“HINSTANCE變量
    • 相等則表示:創建和註冊的窗口類在同一模塊(同一進程創建),創建窗口並返回。
    • 不等則表示:創建和註冊的窗口類不在同一模塊(不同的進程創建),繼續執行3
  • 3 全局窗口類查找
    • 找到執行4.
    • 未找到執行5.
  • 4 使用找到的窗口類的信息,創建窗口返回。
  • 5 系統窗口類中查找
    • 找到則創建窗口返回。
    • 未找到則創建窗口失敗。

Win32API全局窗口類的註冊與創建