Win32 Windows編程 四

來源:互聯網
上載者:User

標籤:windows   編程   c++   應用程式   win32   

一 視窗註冊和視窗建立的過程

1  Win32視窗程序建立步驟

1.1 WinMain入口函數的定義

1.2 WindowsProc 函數的定義

1.3註冊視窗

RegisterClass/RegisterClassEx

      1.4建立視窗

CreateWindow /CreateWindowEx

1.5 顯示重新整理視窗

ShowWindow/UpdateWindow

1.6 訊息處理

GetMessage /DisptchMessage

1.7 視窗退出

WM_DESTROY:PostQuitMessage

2  視窗的註冊

2.1 視窗的分類

2.1.1 系統全域類按鈕 文字框 工具列 

2.1.2 應用程式全域視窗類別,可以在EXE和DLL中使用的視窗。

2.1.3 局部視窗類別。只能在本模組中使用的視窗類別。

2.2 實現視窗的註冊

2.2.1 系統全域的視窗類別,無需註冊直接使用。使用CreateWindow函數,在CLASSNAME中指定系統已經定義好的視窗類別型名稱即可

2.2.2 應用程式的全域視窗類別,需要用代碼實現,在註冊時需要增加CS_GLOBALCLASS定義實現方式:

WNDCLASS wc = {  0  };

wc.style = CS_GLOBALCLASS;

.....

RegisterClass( &wc );

2.2.3 局部視窗類別,不能增加CS_GLOBALCLASS定義

     使用RegisterClass/RegisterClassEx註冊

typedef struct _WNDCLASSEX {     UINT       cbSize;   //結構體大小    UINT       style;     WNDPROC    lpfnWndProc;     int        cbClsExtra;     int        cbWndExtra;     HINSTANCE  hInstance;     HICON      hIcon;     HCURSOR    hCursor;     HBRUSH     hbrBackground;     LPCTSTR    lpszMenuName;     LPCTSTR    lpszClassName;     HICON      hIconSm; //視窗小表徵圖} WNDCLASSEX, *PWNDCLASSEX; 
   2.2.4 視窗類別的風格
CS_HREDRAW         視窗水平變化,重新繪製視窗
CS_VREDRAW   視窗垂直變化,重新繪製視窗
CS_GLOBALCLASS   建立應程式全域視窗類別
CS_DBCLICK    可以接受滑鼠雙擊訊息
CS_BYTEALIGNCLIENT 客戶區對齊 以8的倍數對齊
CS_BYTEALIGNWINDOW 視窗對齊
CS_CLASSDC所有這種類型的視窗使用容一個DC(裝置描述表 繪圖使用)
CS_OWNDC每個視窗擁有自己的DC
CS_PARENTDC     使用父視窗的DC
CS_SAVEBITS 是用位元影像儲存視窗,可以提高視窗介面的重新整理效能
CS_NOCLOSE禁止關閉命令
   2.2.5 視窗類別的附加資料 cbClsExtra在視窗類別的資料資訊中添加自己的資訊
cbClsExtra 用於添加資訊的記憶體的大小, 一般是4的倍數
SetClassLong 將資訊儲存到記憶體中
GetClassLong 將資訊從記憶體中取出
DWORD GetClassLong(  HWND hWnd,  // handle to window int nIndex  // offset of value to retrieve);
   2.2.6 視窗附加資料 
在視窗的資料資訊中添加自己的資訊
cbWndExtra 用於添加資訊的記憶體大小
SetWindowLong
LONG SetWindowLong(  HWND hWnd,       // handle to window int nIndex,      // offset of value to setLONG dwNewLong   // new value);
GetWindowLong
LONG GetWindowLong(   HWND hWnd,  // handle to window int nIndex  // offset of value to retrieve);

2.3 視窗類別相關函數

RegisterClass/RegisterClassEx 註冊

UnregisterClass 登出

GetClassInfo/GetClassInfoEx 擷取資訊

GetClassName 擷取視窗類別的名稱

GetClassLong/SetClassLong 附加資料的設定和擷取

GetWindowLong/SetWindowLong 附加資料的設定和擷取

2.4 建立視窗時如何錨定視窗類

2.4.1 尋找應用程式的局部視窗類別。如果找到執行2.4.2,否則執行2.4.3

2.4.2 如果找到名稱一致的視窗類別,比較HINSTANCE的控制代碼,如果一致,就使用找到的視窗類別資訊建立視窗,如果不同,繼續尋找

2.4.3 如果未找到名稱一致的視窗類別,會繼續在應用程式全域視窗類別中尋找,如果找到執行2.4.4,否則執行2.4.5

2.4.4 全域視窗找到一致的,使用找到視窗類別資訊建立視窗

       2.4.5 如果未找到,就去系統全域視窗類別中尋找,如果找到,建立視窗,否則返回失敗

3 .視窗建立

3.1 視窗建立函數

CreateWindow/CreateWindowEx

HWND CreateWindowEx(  DWORD dwExStyle,      // extended window style 視窗的擴充樣式  LPCTSTR lpClassName,  // registered class name  LPCTSTR lpWindowName, // window name  DWORD dwStyle,        // window style  int x,                // horizontal position of window  int y,                // vertical position of window  int nWidth,           // window width  int nHeight,          // window height  HWND hWndParent,      // handle to parent or owner window  HMENU hMenu,          // menu handle or child identifier  HINSTANCE hInstance,  // handle to application instance  LPVOID lpParam        // window-creation data);

3.2 視窗風格和擴充風格

視窗風格:WS_XXXX定義的風格,是視窗的基本風格

擴充風格:WS_EX_XXXX定義的風格 是視窗的擴充風格

 擴充風格需要使用CreareWindowEx

WS_OVERLAPPEDWINDOW 層疊式視窗

WS_POPUP 彈出式視窗

WS_CHILD 視窗子視窗


3.3 父視窗和子視窗

3.3.1 CreateWindow時指定父視窗

3,3.2 將視窗的風格增加WS_CHILD

3.3.3 可以使用SetParent 和 GetParent 函數設定和擷取指定的父窗

CreateWindow時可以指定父視窗

WS_CHILD

SetParent

GetParent

其他: MoveWindow 移動視窗

3.4 MDI視窗的建立

3.4.1 主視窗

3.4.2 建立一個MDICLINET視窗

3.4.3 建立一個MDI的子視窗



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.