青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Windows程序內部運行機制 收藏

Windows程序內部運行機制

1,windows程序設計是種事件驅動方式的程序設計,主要基于消息的。當用戶需要完成某種功能時,需要調用OS某種支持,然后OS將用戶的需要包裝成消息,并投入到消息隊列中,最后應用程序從消息隊列中取走消息并進行響應。
2,消息結構:
typedef struct tagMSG {     // msg
    HWND   hwnd;     //接收消息的窗口句柄。和哪個窗口相關聯。
    UINT   message; //消息標識。消息本身是什么。
    WPARAM wParam;   //消息的附加信息。具體取決于消息本身。  
    LPARAM lParam;
    DWORD time;     //消息投遞時間。
    POINT pt;       //消息投遞時,光標在屏幕上的位置。
} MSG;

3,消息隊列:
每個應用程序OS都為它建立一個消息隊列,消息隊列是個先進先出的緩沖區,其中每個元素都是一個消息,OS將生成的每個消息按先后順序放進消息隊列中,應用程序總是取走當前消息隊列中的第一條消息,應用程序取走消息后便知道用戶的操作和程序的狀態,然后對其處理即消息響應,消息響應通過編碼實現。

4,使用VC編程除了良好的C基礎外還需要掌握兩方面:
一,消息本身。不同消息所代表的用戶操作和應用程序的狀態。
二,對于某個特定的消息來說,要讓OS執行某個特定的功能去響應消息。

5,Window程序入口:
int WINAPI WinMain(
HINSTANCE hInstance, // 當前事例句柄。
HINSTANCE hPrevInstance, // 先前事例句柄。
LPSTR lpCmdLine,      // 命令行指針
int nCmdShow          // (窗口)顯示的狀態
);
說明:WinMain函數是Windows程序入口點函數,由OS調用,當OS啟動應用程序的時候,winmain函數的參數由OS傳遞的。

6,創建一個完整的窗口需要經過下面四個操作步驟:
一,設計一個窗口類;如:WNDCLASS wndcls;
二,注冊窗口類;    如:RegisterClass(&wndcls);
三,創建窗口;      如:CreateWindow(),CreateWindowEX();
四,顯示及更新窗口。如:ShowWindow(),UpdateWindow();

說明:創建窗口的時候一定要基于已經注冊的窗口類.

7,Windows提供的窗口類:
typedef struct _WNDCLASS {
    UINT    style;        //窗口的類型
    WNDPROC lpfnWndProc; //窗口過程函數指針(回調函數)
    int     cbClsExtra; //窗口類附加字節,為該類窗口所共享。通常0。
    int     cbWndExtra; //窗口附加字節。通常設為0。
    HANDLE hInstance; //當前應用程序事例句柄。
    HICON   hIcon;      //圖標句柄 LoadIcon();
    HCURSOR hCursor;    //光標句柄 LoadCursor();
    HBRUSH hbrBackground; //畫刷句柄 (HBRUSH)GetStockObject();
    LPCTSTR lpszMenuName; //菜單名字
    LPCTSTR lpszClassName; //類的名字
} WNDCLASS;

8,窗口類注冊:
ATOM RegisterClass(
CONST WNDCLASS *lpWndClass   // address of structure with class
                               // data
);

9,創建窗口:
HWND CreateWindow(
LPCTSTR lpClassName, // pointer to registered class name
LPCTSTR lpWindowName, // pointer to 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,          // handle to menu or child-window identifier
HANDLE hInstance,     // handle to application instance
LPVOID lpParam        // pointer to window-creation data
);

10,顯示和更新窗口窗口:
BOOL ShowWindow(
HWND hWnd,     // handle to window
int nCmdShow   // show state of window
);
BOOL UpdateWindow(
HWND hWnd   // handle of window
);

11,消息循環:
MSG msg;
while(GetMessage(&msg,...))    //從消息隊列中取出一條消息
{
TranslateMessage(&msg); //進行消息(如鍵盤消息)轉換
DispatchMessage(&msg); //分派消息到窗口的回調函數處理,(OS調用窗口回調函數進行處理)。
}

其中:
//**The GetMessage function retrieves a message from the calling thread's message queue and places it in the specified structure.
//**If the function retrieves a message other than WM_QUIT, the return value is nonzero.If the function retrieves the WM_QUIT message, the return value is zero. If there is an error, the return value is -1.

BOOL GetMessage(
LPMSG lpMsg,         // address of structure with message
HWND hWnd,           // handle of window
UINT wMsgFilterMin, // first message
UINT wMsgFilterMax   // last message
);


//The TranslateMessage function translates virtual-key messages into character messages. The character messages are posted to the calling thread's message queue, to be read the next time the thread calls the GetMessage or PeekMessage function.
BOOL TranslateMessage(
CONST MSG *lpMsg   // address of structure with message
);

//The DispatchMessage function dispatches a message to a window procedure.
LONG DispatchMessage(
CONST MSG *lpmsg   // pointer to structure with message
);


12,窗口過程函數(回調函數)原型:
The WindowProc function is an application-defined function that processes messages sent to a window. The WNDPROC type defines a pointer to this callback function. WindowProc is a placeholder(占位符) for the application-defined function name.

LRESULT CALLBACK WindowProc( //這里WindowProc是個代號名字。
HWND hwnd,      // handle to window
UINT uMsg,      // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam   // second message parameter
);

說明:兩種函數調用約定(__stdcall 和 __cdecl):
#define CALLBACK    __stdcall
//__stdcall 標準調用預定,是PASCAL 調用約定,象DELPHI使用的就是標準調用約定
#define WINAPIV     __cdecl
// __cdecl 是C 語言形式的調用約定。


主要區別:函數參數傳遞順序 和 對堆棧的清除上。
問題:除了那些可變參數的函數調用外,其余的一般都是__stdcall約定。但 C/C++編譯默然的是__cdecl約定。所以如果在VC等環境中調用__stdcall約定的函數,必須要在函數聲明的時加上 __stdcall 修飾符,以便對這個函數的調用是使用__stdcall約定(如使用DELPHI編寫的DLL時候)。
(VC中可通過這途徑修改:project|settings..|c/c++|...)


在窗口過程函數中通過一組switch語句來對消息進行處理:
如:
LRESULT CALLBACK WindowProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam  
)
{
    switch(uMsg)
    {
case WM_PAINT:
   ...
   break;
case ...
   break;
case WM_CLOSE:
   //DestroyWindow(hwnd);
    //銷毀窗口,并發送WM_DESTROY消息。
   break;
case WM_DESTROY:
   //PostQuitMessage(0);
   //發送WM_QUIT消息到消息隊列中,請求終止。
         //GetMessage()取到WM_QUIT消息后,返回0,退出消息循                //   環,從而終止應用程序。
   break;
default:
   return DefWindowProc(hwnd,uMsg,wParam,lParam);
//用缺省的窗口過程處理我們不感興趣的消息(其它消息)。
//這是必須的。
    }//switch
return 0;
}//WindowProc

13,DestroyWindow()函數和PostQuitMessage()函數原型:
//**The DestroyWindow function destroys the specified window. The function sends WM_DESTROY and WM_NCDESTROY messages。

BOOL DestroyWindow(
HWND hWnd   // handle to window to destroy
);

//**The PostQuitMessage function indicates to the system that a thread has made a request to terminate (quit). It is typically used in response to a WM_DESTROY message.
//**The PostQuitMessage function posts a WM_QUIT message to the thread's message queue and returns immediately; the function simply indicates(預示,通知) to the system that the thread is requesting to quit at some time in the future.

When the thread retrieves the WM_QUIT message from its message queue, it should exit its message loop and return control to the system.

VOID PostQuitMessage(
int nExitCode   // exit code
);

14,關于DC句柄獲取:
a)使用BeginPaint(),EndPaint()對。注意只能在響應WM_PAINT消息時使用。
b)使用GetDc(),ReleaseDC()對。注意他們不能在響應WM_PAINT中使用。

posted on 2010-06-21 22:41 lhking 閱讀(143) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


導航

<2010年6月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

統計

常用鏈接

留言簿

隨筆檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲嫩草精品久久| 欧美一区二区成人6969| 另类酷文…触手系列精品集v1小说| 国产欧美在线| 久久久国产午夜精品| 欧美一区午夜精品| 18成人免费观看视频| 奶水喷射视频一区| 欧美极品影院| 亚洲欧美在线免费| 久久成人精品电影| 亚洲韩国一区二区三区| 亚洲精品影院| 国产欧美日韩精品专区| 久久亚洲精品视频| 欧美福利影院| 亚洲欧美国产制服动漫| 欧美在线|欧美| 99re8这里有精品热视频免费| 亚洲精品少妇30p| 国产美女精品| 亚洲电影免费观看高清完整版在线观看 | 国产精品拍天天在线| 欧美在线999| 欧美黑人多人双交| 性欧美videos另类喷潮| 美女国产精品| 欧美一区二区在线免费播放| 久久久精品久久久久| 日韩午夜在线播放| 久久精品国产99精品国产亚洲性色| 91久久中文| 午夜影院日韩| 中日韩男男gay无套| 欧美一区二区三区日韩| 一本色道久久综合亚洲二区三区| 午夜精品成人在线| 制服丝袜激情欧洲亚洲| 久久久五月天| 欧美一区二区三区在线看 | 在线视频你懂得一区二区三区| 国产情人综合久久777777| 亚洲国产天堂久久综合| 国产一区二区三区黄| 在线视频欧美日韩精品| 亚洲看片网站| 女人天堂亚洲aⅴ在线观看| 久久精品人人做人人综合| 欧美日韩亚洲91| 亚洲激情图片小说视频| 在线观看亚洲视频啊啊啊啊| 亚洲一区二区在线免费观看视频| 亚洲精品少妇30p| 久久久精品一区| 久久久91精品国产| 国产女同一区二区 | 久久久久久免费| 国产精品久久久久aaaa樱花| 亚洲卡通欧美制服中文| 91久久夜色精品国产九色| 久久国产一二区| 久久成人精品无人区| 国产精品毛片va一区二区三区| 亚洲精品视频在线| 99视频在线精品国自产拍免费观看| 久久久一区二区| 久久婷婷影院| 精品91在线| 久久天堂av综合合色| 美女视频黄 久久| 在线观看一区欧美| 麻豆成人av| 亚洲精品乱码久久久久久按摩观 | 精品动漫一区| 久久免费观看视频| 欧美黄网免费在线观看| 亚洲精品国产品国语在线app| 久久美女艺术照精彩视频福利播放| 看片网站欧美日韩| 亚洲黄色免费网站| 欧美日韩免费看| 亚洲综合视频1区| 久久午夜激情| 亚洲激情在线播放| 欧美日韩成人一区二区三区| 亚洲六月丁香色婷婷综合久久| 亚洲午夜在线观看| 国产主播一区| 蜜臀久久99精品久久久久久9| 亚洲国内精品在线| 午夜国产精品视频免费体验区| 国产亚洲视频在线观看| 久久夜色精品国产| 99av国产精品欲麻豆| 欧美中文字幕久久| 亚洲国产美女精品久久久久∴| 欧美精品18videos性欧美| 亚洲视频视频在线| 美女999久久久精品视频| 99精品国产在热久久| 国产农村妇女精品一二区| 久久精品亚洲| 一区二区三区精品视频在线观看| 久久精品久久综合| 夜夜精品视频| 好男人免费精品视频| 欧美日韩性生活视频| 久久精品人人做人人爽| 日韩午夜黄色| 免费成人你懂的| 亚洲一区免费在线观看| 在线看欧美日韩| 国产精品久久久久久久久果冻传媒| 久久久国产91| 亚洲深夜福利网站| 亚洲国产成人精品久久久国产成人一区| 亚洲一区久久| 日韩性生活视频| 亚洲第一网站免费视频| 国产精品视频精品视频| 欧美国产专区| 久久精品三级| 性视频1819p久久| 一区二区三区产品免费精品久久75| 美国十次成人| 久久久精品一区| 性做久久久久久| 亚洲无线观看| 一区二区三区国产在线| 一区二区在线视频| 国产伦精品一区二区三| 欧美午夜片在线观看| 欧美电影在线观看完整版| 久久久久久久尹人综合网亚洲 | 欧美激情在线狂野欧美精品| 久久国产精品一区二区三区| 亚洲欧美三级在线| 亚洲少妇在线| 夜夜嗨av色综合久久久综合网| 亚洲经典自拍| 亚洲黄色在线视频| 亚洲国产另类 国产精品国产免费| 国产亚洲欧美另类一区二区三区| 国产精品高潮呻吟久久av黑人| 欧美日韩一区二区三区| 欧美日韩 国产精品| 欧美人与性动交cc0o| 欧美激情亚洲自拍| 欧美日韩另类视频| 欧美三级精品| 国产精品亚发布| 国产亚洲aⅴaaaaaa毛片| 国产日韩在线视频| 韩国av一区二区三区四区| 国产曰批免费观看久久久| 红桃视频欧美| 亚洲人成7777| 国产精品99久久不卡二区| 亚洲欧美国产精品桃花| 欧美伊人久久久久久午夜久久久久| 午夜亚洲激情| 久久综合99re88久久爱| 亚洲高清一区二| 亚洲天堂激情| 久久超碰97中文字幕| 免费欧美日韩国产三级电影| 欧美激情在线播放| 国产精品乱子久久久久| 韩国av一区二区三区四区| 亚洲激情六月丁香| 亚洲五月六月| 久久久久网站| 亚洲国产另类精品专区| 中文av一区二区| 久久精品最新地址| 欧美激情在线观看| 国产三区精品| 91久久午夜| 欧美在线综合| 亚洲高清自拍| 午夜精品电影| 欧美精品一区二区三| 国产一区91精品张津瑜| 亚洲精品日韩精品| 久久精品夜色噜噜亚洲a∨| 亚洲高清一区二区三区| 亚洲小视频在线| 美女日韩欧美| 国产欧美日韩高清| 一区二区电影免费在线观看| 久久久久久九九九九| 99国产精品一区| 免费看黄裸体一级大秀欧美| 国产精品一区二区三区乱码 | 欧美日韩专区在线| 亚洲第一狼人社区| 欧美在线播放高清精品| 亚洲精品裸体| 久久综合久久综合久久| 国产欧美日韩亚洲一区二区三区|