1. 程式人生 > >孫鑫視訊---Windows程式內部執行原理

孫鑫視訊---Windows程式內部執行原理

視窗的建立

建立一個完整的視窗需要經過下面四個操作步驟:

1. 設計一個視窗類;

2. 註冊視窗類;

3. 建立視窗;

4. 顯示及更新視窗。

設計視窗類

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

lpfnWndProc:回撥函式

HICON:圖示

HCURSOR:游標

HBRUSH:畫刷(影響背景顏色)

LPCTSTR:選單的名字

LPCTSTR:名字

#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; }

認識 CreateWindow 函式