多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > 飛鴿傳書源碼分析-程序啟動過程

飛鴿傳書源碼分析-程序啟動過程

來源:程序員人生   發布時間:2014-10-02 08:00:01 閱讀次數:3226次

轉載請注明出處:http://blog.csdn.net/mxway/article/details/39581119

本文章是在飛鴿傳書的2.06源碼基礎上分析

飛鴿傳書源碼運行流程如下,本篇文章只說明了飛鴿傳書的啟動過程,對于飛鴿偉書的消息機制及菜單加載等功能都不在本篇文章范圍之內。


1. WinMain函數

int WINAPI WinMain(HINSTANCE hI, HINSTANCE, LPSTR cmdLine, int nCmdShow) { TMsgApp app(hI, cmdLine, nCmdShow); return app.Run(); }

2.TApp類定義的部分源碼

class TApp{ protected: <span style="white-space:pre"> </span>virtual BOOL InitApp(void); <span style="white-space:pre"> </span>TWin *mainWnd; public: virtual void InitWindow() = 0; virtual int Run(); };

3. TMsgApp類的定義

class TMsgApp : public TApp { <span style="white-space:pre"> </span>public: <span style="white-space:pre"> </span>TMsgApp(HINSTANCE _hI, LPSTR _cmdLine, int _nCmdShow); virtual ~TMsgApp(); virtual void InitWindow(void); };

在WinMain函數中定義了TMsgApp的對象app,app.Run由于TMsgApp繼承TApp,而TMsgApp沒有重寫Run方法,所以此時調用父類TApp的Run方法,該方法中開頭有如下兩條語句

InitApp();

InitWindow();

這兩條語句與下面的語句等價

this->InitApp();

this->InitWindow();

其意思就是調用TMsgApp的InitApp()和InitWindow()方法,由于TMsgApp沒有重寫InitApp()方法,所以調用的是父類的InitApp方法。TApp中定義的InitWindow是純虛函數,所以this->InitWindow()調用的是TMsgApp中的InitWindow()方法。
InitWindow部分源碼

void TMsgApp::InitWindow(void) { <span style="white-space:pre"> </span>mainWnd = new TMainWin(nicAddr, port_no); mainWnd->Create(class_name, IP_MSG, WS_OVERLAPPEDWINDOW | (IsNewShell() ? WS_MINIMIZE : 0)); }

4.Twin類定義的部分源碼

class TWin { public: virtual BOOL Create(LPCSTR className=NULL, LPCSTR title="", DWORD style=(WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN), DWORD exStyle=0, HMENU hMenu=NULL); virtual BOOL EvCreate(LPARAM lParam); };

5.TMainWin類定義的部分源碼

class TMainWin : public TWin { virtual BOOL EvCreate(LPARAM lParam); };
InitWindow中執行mainWnd->Create()方法,TMainWin繼承Twin,由于TMainWin沒有重寫Create方法,所以此Create方法調用的是TWin中的Create,Twin::Create源碼如下

BOOL TWin::Create(LPCSTR className, LPCSTR title, DWORD style, DWORD exStyle, HMENU hMenu) { if (className == NULL) className = TApp::defaultClass; TApp::AddWin(this); if ((hWnd = ::CreateWindowEx(exStyle, className, title, style, rect.left, rect.top, rect.right, rect.bottom, parent ? parent->hWnd : NULL, hMenu, TApp::hI, NULL)) == NULL) return TApp::DelWin(this), FALSE; else return TRUE; }

該方法中調用了Windows API函數CreateWindowEx方法,調用該方法后將會觸發一條WM_CREATE消息。該消息的處理函數是EvCreate(后面再詳解飛鴿傳書的消息機制)

在TMainWin中定義重寫了父類Twin中的EvCreate方法,所以下面調用的是TMainWin中的EvCreate方法。EvCreate方法部分源碼如下

BOOL TMainWin::EvCreate(LPARAM lParam) { if (IsNewShell()) { Show(SW_HIDE); while (TaskBar(NIM_ADD, hMainIcon, IPMSG_MSGSTR) != TRUE) Sleep(1000); // for logon script } else Show(SW_MINIMIZE); }

此方法的功能是如果操作系統允許應用程序托盤到任務就以托盤方式運行,否則窗口就以就小化方式運行。至此,飛鴿傳書的主界面啟動完成。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 中文字幕2021 | 就去干成人 | 中文字幕天堂在线 | 亚洲免费大片 | 国产永久在线观看 | 亚洲人成高清 | 青春草久久 | 五月天久久久 | 亚洲精品播放 | 99精品欧美一区二区三区 | 天天综合在线观看 | 一级毛片一级毛片a毛片欧美 | 国产高清乱码无卡女大生 | 国产精品福利网站 | 亚洲国产欧美一区二区欧美 | 亚洲品质自拍视频网站 | 最近中文版字幕在线观看 | 欧美人欧美人与动人物性行为 | 成人a毛片一级 | l欧美18一19sex性 | 免费簧网站永久在线播放国产 | 欧美在线视频播放 | 日韩大片免费看 | 伊人久久香 | 玖玖视频精品 | www.激情| 国产国产人精品视频69 | 婷婷色一二三区波多野衣 | 国内小情侣一二三区在线视频 | 自拍偷自第11页 | 国产精品亚洲综合五月天 | 亚洲品质自拍视频网站 | 一级在线免费视频 | 欧美日韩国产一区二区三区 | 日本一区二区成人教育 | 亚洲欧美天堂 | 国产人做人爱免费视频 | 免费看黄色网址 | 羞羞视频免费网站入口 | 亚洲精品国产精品国自产网站 | 98精品全国免费观看视频 |