亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? visual c++編程技巧.txt

?? Visual C++編程技巧.txt Visual C++編程技巧.txt
?? TXT
?? 第 1 頁 / 共 5 頁
字號:
http://syinfo.51.net/technology/index.html
http://syinfo.51.net/technology/index.html
http://syinfo.51.net/technology/index.html
http://syinfo.51.net/technology/index.html


Visual C++編程技巧之一 

1. 如何獲取應用程序的實例句柄? 

2. 如何通過代碼獲得應用程序主窗口的指針? 

3.如何在程序中獲得其他程序的 圖標? 

4.如何編程結束應用程序?如何編程控制windows的重新引導? 

5.怎樣加栽其他的應用程序? 

6. 確定應用程序的 路徑 

7. 獲得各種目錄信息 

8. 如何自定義消息 

  

1. 如何獲取應用程序的實例句柄? 

應用程序的 實例句柄保存在CWinAppIm_hInstance 中,可以這么調用 

AfxGetInstancdHandle獲得句柄. 

Example: HANDLE hInstance=AfxGetInstanceHandle(); 

2. 如何通過代碼獲得應用程序主窗口的指針? 

主窗口的 指針保存在CWinThread::m_pMainWnd中,調用 AfxGetMainWnd實現。 

AfxGetMainWnd() ->ShowWindow(SW_SHOWMAXMIZED); //使程序最大化. 

3.如何在程序中獲得其他程序的 圖標? 

兩種方法: 

(1) SDK函數 SHGetFileInfo 或使用 ExtractIcon獲得圖標資源的 handle, 

(2) SDK函數 SHGetFileInfo獲得有關文件的 很多信息,如大小圖標,屬性,類型等. 

Example(1): 在程序窗口左上角顯示 NotePad圖標. 

void CSampleView: OnDraw(CDC * pDC) 

{ 

if( :: SHGetFileInfo(_T("c:\\pwin95\\notepad.exe"),0, 

&stFileInfo,sizeof(stFileInfo),SHGFI_ICON)) 

{ 

pDC ->DrawIcon(10,10,stFileInfo.hIcon); 

} 

} 

Example(2):同樣功能,Use ExtractIcon Function 

void CSampleView:: OnDraw(CDC *pDC) 

{ 

HICON hIcon=:: ExtractIcon(AfxGetInstanceHandle(),_T 

("NotePad.exe"),0); 

if (hIcon &&hIcon!=(HICON)-1) 

pDC->DrawIcon(10,10,hIcon); 

} 

說明: 獲得notepad.exe的路徑正規上來說用GetWindowsDirectory 函數得到,如果是調用 win95下的畫筆,應該用訪問注冊表的方法獲得其路徑,要作成一個比較考究的程序,考慮應該全面點. 

4.如何編程結束應用程序?如何編程控制windows的重新引導? 

這是個很簡單又是編程中經常要遇到的問題. 

第一問,向窗口發送 WM_CLOSE消息,調用 CWnd::OnClose成員函數.允許對用戶提示 

是否保存修改過的數據. 

Example: AfxGetMainWindow()->SendMessage(WM_CLOSE); 

還可以創建一個自定義的函數 Terminate Window 

void Terminate Window(LPCSTR pCaption) 

{ 

CWnd *pWnd=Cwnd::FindWindow(NULL,pCaption); 

if (pWnd) 

pWnd ->SendMessage(WM_CLOSE); 

} 

說明: FindWindow函數不是提倡的做法,因為它無法處理標題欄自動改變,比如我們要檢測 Notepad是不是已運行而事先不知道Notepad的標題欄,這時 FindWindow就無能為力了,可以通過枚舉 windows任務列表的辦法來實現。 在 機械出版社"Windows 95 API開發人員指南"一書有比較詳細的介紹,這里就不再多說樂。 

第二問,Use ExitWindowsEx Function函數控制系統是重新引導,還是重啟 windows.前面已經有人講過樂,就不再提了。 

5.怎樣加栽其他的應用程序? 

我記得這好象是出場頻度很高的問題。 

三個SDK函數 winexec, shellexecute,createprocess可以使用。 

WinExec最簡單,兩個參數,前一個指定路徑,后一個指定顯示方式.后一個參數值得說一下,比如泥用 SW_SHOWMAXMIZED方式去加栽一個無最大化按鈕的 程序,呵呵就是Neterm,calc等等,就不會出現正常的 窗體,但是已經被加到任務列表里了。ShellExecute較 WinExex靈活一點,可以指定工作目錄,下面的 Example就是直接打開 c:\temp\1.txt,而不用加栽與 txt文件關聯的應用程序,很多安裝程序完成后都會打開一個窗口,來顯示Readme or Faq,偶猜就是這么作的啦. 

ShellExecute(NULL,NULL,_T("1.txt"),NULL,_T("c:\\temp"),SW_SHOWMAXMIZED); 

CreateProcess最復雜,一共有十個參數,不過大部分都可以用NULL代替,它可以指定進程的安全屬性,繼承信息,類的優先級等等.來看個很簡單的 Example: 

STARTUPINFO stinfo; //啟動窗口的信息 

PROCESSINFO procinfo; //進程的信息 

CreateProcess(NULL,_T("notepad.exe"),NULL,NULL.FALSE, NORMAL_PRIORITY_ 

CLASS,NULL,NULL, &stinfo,&procinfo); 

6. 確定應用程序的 路徑 

前些天好象有人問過這個問題. 

Use GetModuleFileName 獲得應用程序的路徑,然后去掉可執行文件名。 

Example: 

TCHAR exeFullPath[MAX_PATH]; // MAX_PATH在API中定義了吧,好象是128 

GetModuleFileName(NULL,exeFullPath,MAX_PATH) 

7. 獲得各種目錄信息 

Windows目錄: Use "GetWindowsDirectory“ 

Windows下的system目錄: Use "GetSystemDirectory" 

temp目錄: Use "GetTempPath " 

當前目錄: Use "GetCurrentDirectory" 

請注意前兩個函數的第一個參數為 目錄變量名,后一個為緩沖區; 后兩個相反. 

8. 如何自定義消息 

也有人問過的,其實不難。 

(1) 手工定義消息,可以這么寫 #define WM_MY_MESSAGE(WM_USER+100), 

MS 推薦的至少是 WM_USER+100; 

(2)寫消息處理函數,用 WPARAM,LPARAM返回LRESULT. 

LRESULT CMainFrame::OnMyMessage(WPARAM wparam,LPARAM lParam) 

{ 

//加入你的處理函數 

} 

(3) 在類的 AFX_MSG處進行聲明,也就是常說的"宏映射" 

  


-----------------------------------------------------------------------------    

Visual C++ 編程技巧之二 

9. 如何改變窗口的圖標? 

10. 如何改變窗口的缺省風格? 

11. 如何將窗口居中顯示? 

12. 如何讓窗口和 MDI窗口一啟動就最大化和最小化? 

13. 如何使程序保持極小狀態? 

14. 如何限制窗口的大小? 

15. 如何使窗口不可見? 

16. 如何使窗口始終在最前方? 

  

9. 如何改變窗口的圖標? 

向窗口發送 WM_SECTION消息。 

Example: 

HICON hIcon=AfxGetApp() ->LoadIcon(IDI_ICON); 

ASSERT(hIcon); 

AfxGetMainWnd() ->SendMessage(WM_SECTION,TRUE,(LPARAM) hIcon); 

10. 如何改變窗口的缺省風格? 

重栽 CWnd:: PreCreateWindow 并修改CREATESTRUCT結構來指定窗口風格和其他 

創建信息. 

Example: Delete "Max" Button and Set Original Window's Position and Size 

BOOL CMainFrame:: PreCreateWindow (CREATESTRUCT &cs) 

{ 

cs.style &=~WS_MAXINIZEMOX; 

cs.x=cs.y=0; 

cs.cx=GetSystemMetrics(SM_CXSCREEN/2); 

cs.cy=GetSystemMetrics(SM_CYSCREEN/2); 

return CMDIFramewnd ::PreCreateWindow(cs); 

} 

11. 如何將窗口居中顯示? 

Easy, Call Function CWnd:: Center Windows 

Example(1): Center Window( ); //Relative to it's parent 

// Relative to Screen 

Example(2): Center Window(CWnd:: GetDesktopWindow( )); 

//Relative to Application's MainWindow 

AfxGetMainWnd( ) -> Center Window( ); 

12. 如何讓窗口和 MDI窗口一啟動就最大化和最小化? 

先說窗口。 

在 InitStance 函數中設定 m_nCmdShow的 取值. 

m_nCmdShow=SW_SHOWMAXMIZED ; //最大化 

m_nCmdShow=SW_SHOWMINMIZED ; //最小化 

m_nCmdShow=SW_SHOWNORMAL ; //正常方式 

MDI窗口: 

如果是創建新的應用程序,可以用 MFC AppWizard 的Advanced 按鈕并在 

MDI子窗口風格組中檢測最大化或最小化; 還可以重載 MDI Window 的 

PreCreateWindow函數,設置WS_MAXMIZE or WS_MINMIZE; 

如果從 CMDIChildWnd 派生,調用 OnInitialUpdate函數中的 CWnd::Show 

Window來指定 MDI Child Window的 風格。 

13. 如何使程序保持極小狀態? 

很有意思的 問題 

這么辦: 在恢復程序窗體大小時, Windows會發送WM_QUERY-OPEN消息, 

用 ClassWizard設置成員函數 OnQueryOpen() ,add following code: 

Bool CMainFrame:: OnQueryOpen( ) 

{ 

Return false; 

} 

14. 如何限制窗口的大小? 

也就是 FixedDialog形式。 Windows 發送 WM_GETMAXMININFO消息來跟蹤, 

響應它,在 OnGetMAXMININFO 中寫代碼: 

15. 如何使窗口不可見? 

很簡單,用SW_HIDE 隱藏窗口,可以結合 FindWindow,ShowWindow 控制. 

16. 如何使窗口始終在最前方? 

兩種途徑. 

BringWindowToTop(Handle); 

SetWindowPos函數,指定窗口的 最頂風格,用WS_EX_TOPMOST擴展窗口的 風格 

Example: 

void ToggleTopMost( CWnd *pWnd) 

{ 

ASSERT_VALID(pWnd); 

pWnd ->SetWindowPos(pWnd-> GetStyle( ) &WS_EX_TOPMOST)? 

&wndNoTopMOST: &wndTopMost,0,0,0,0,SSP_NOSIZE|WSP_NOMOVE); 

} 


--------------------------------------------------------------------------------


Visual C++編程技巧之三 

17、如何創建一個字回繞的CEditView 

18、通用控件的顯示窗口 

19、移動窗口 

20、重置窗口的大小 

21、如何單擊除了窗口標題欄以外的區域使窗口移動 

22、如何改變視窗的背景顏色 

23、如何改變窗口標題 

24、如何防止主框窗口在其說明中顯示活動的文檔名 

  

17、如何創建一個字回繞的CEditView 

重載CWnd : : PreCreateWindow和修改CREATESTRUCT結構,關閉CEditView對象的ES_AUTOHSCROLL和WS_HSCROLL風格位, 由于CEditView : : PreCreateWindow顯示設置cs. style,調用基類函數后要修改cs . style。 

BOOL CSampleEDitView : : PreCreateWindow (CREATESTRUCT&cs) 

{ 

//First call basse class function . 

BOOL bResutl =CEditView : : PreCreateWindow (cs) ; 

// Now specify the new window style . 

cs.style &= ~ (ES_AUTOHSCROLL |WS_HSCROLL); 

return bResult ; 

} 

18、通用控件的顯示窗口 

MFC提供了幾個CView派生的視窗類, 封裝了通用控件的功能,但仍然使用工 

作框文檔顯示窗口體系結構:CEditView封裝了編輯控件,CTreeView保持了樹列表 

控件,CListView封裝了列表顯示窗口控件,CRichEditView可以處理多種編輯控件。 

19、移動窗口 

調用CWnd : : SetWindowPos并指定SWP_NOSIZE標志。目的位置與父窗口 

有關(頂層窗口與屏幕有關)。調用CWnd : : MoveWindow時必須要指定窗口 

的大小。 

//Move window to positoin 100 , 100 of its parent window . 

SetWindowPos (NULL, 100 , 100 , 0 , 0 , SWP_NOSIZE |SWP_NOAORDER); 

20、重置窗口的大小 

調用CWnd: : SetWindowPos并指定SWP_NOMOVE標志, 也可調用 

CWnd : : MoveWindow 但必須指定窗口的位置。 

// Get the size of the window . 

Crect reWindow ; 

GetWindowRect (reWindow ); 

//Make the window twice as wide and twice as tall . 

SetWindowPos (NULL , 0 , 0 , reWindow . Width ( ) *2, 

reWindow . Height () * 2, 

SWP_NOMOVE |SWP_NOZORDER ); 

21、如何單擊除了窗口標題欄以外的區域使窗口移動 

當窗口需要確定鼠標位置時Windows向窗口發送WM_NCHITTEST信息,可以處理 

該信息使Windows認為鼠標在窗口標題上。對于對話框和基于對話的應用程序,可 

以使用ClassWizard處理該信息并調用基類函數, 如果函數返回HTCLIENT 則表明 

鼠標在客房區域,返回HTCAPTION表明鼠標在Windows的標題欄中。 

UINT CSampleDialog : : OnNcHitTest (Cpoint point ) 

{ 

UINT nHitTest =Cdialog: : OnNcHitTest (point ); 

return (nHitTest = =HTCLIENT)? HTCAPTION : nHitTest ; 

} 

上述技術有兩點不利之處, 其一是在窗口的客戶區域雙擊時, 窗口將極大; 

其二, 它不適合包含幾個視窗的主框窗口。還有一種方法,當用戶按下鼠標左鍵 

使主框窗口認為鼠標在其窗口標題上,使用ClassWizard在視窗中處理WM_LBUTTODOWN 

信息并向主框窗口發送一個WM_NCLBUTTONDOWN信息和一個單擊測試HTCAPTION。 

void CSampleView : : OnLButtonDown (UINT nFlags , Cpoint point ) 

{ 

CView : : OnLButtonDow (nFlags , pont ); 

//Fool frame window into thinking somene clicked on 

its caption bar . 

GetParentFrame ( ) —> PostMessage ( 

WM_NCLBUTTONDOWN , HTCAPTION , MAKELPARAM (poitn .x , point .y) ); 

} 

該技術也適用于對話框和基于對的應用程序,只是不必調用CWnd : : GetParentFrame 。 

void CSampleDialog : : OnLbuttonDown (UINT nFlags, Cpoint point ) 

{ 

Cdialog : : OnLButtonDow (nFlags, goint ); 

//Fool dialog into thinking simeone clicked on its caption bar . 

PostMessage (WM_NCLBUTTONDOWN , HTCAPTION , MAKELPARM (point.x , point. y ) ) 

} 

22、如何改變視窗的背景顏色 

Windows向窗口發送一個WM_ERASEBKGND消息通知該窗口擦除背景,可以使用 

ClassWizard重載該消息的缺省處理程序來擦除背景(實際是畫),并返回TRUE以 

防止Windows擦除窗口。 

//Paint area that needs to be erased. 

BOOL CSampleView : : OnEraseBkgnd (CDC* pDC) 

{ 

// Create a pruple brush. 

CBrush Brush (RGB (128 , 0 , 128) ); 

// Select the brush into the device context . 

CBrush* pOldBrush = pDC—>SelcetObject (&brush); 

// Get the area that needs to be erased . 

CRect reClip ; 

pDC—>GetCilpBox (&rcClip); 

//Paint the area. 

pDC—> PatBlt (rcClip.left , rcClip.top , 

rcClip.Width ( ) , rcClip.Height ( ) , PATCOPY ); 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久久久免费桃花| 91麻豆.com| 日韩片之四级片| 老司机免费视频一区二区| 精品福利一二区| 国产老妇另类xxxxx| 欧美高清在线一区二区| a在线播放不卡| 亚洲在线视频免费观看| 欧美在线一二三四区| 日日摸夜夜添夜夜添亚洲女人| 欧美高清hd18日本| 久久91精品国产91久久小草| 久久久久久99精品| 99视频有精品| 五月天精品一区二区三区| 精品国产123| 91啪在线观看| 日韩国产欧美三级| 国产亚洲视频系列| 99久久精品免费看国产| 天天综合色天天| 国产色产综合产在线视频| 91看片淫黄大片一级在线观看| 午夜不卡av免费| 国产亚洲欧美激情| 欧美丝袜丝交足nylons| 久久99精品一区二区三区三区| 国产精品久线观看视频| 欧美精品xxxxbbbb| 高清成人免费视频| 午夜激情一区二区三区| 国产欧美一区二区三区鸳鸯浴| 欧美中文字幕亚洲一区二区va在线| 日韩av在线播放中文字幕| 国产欧美日韩精品a在线观看| 欧美性生活影院| 国产91丝袜在线播放九色| 亚洲大片在线观看| 国产精品欧美久久久久无广告 | 国产精品女同互慰在线看| 在线观看成人小视频| 国产一区免费电影| 婷婷久久综合九色国产成人| 国产精品国产精品国产专区不片| 9191精品国产综合久久久久久 | 日韩伦理免费电影| 欧美不卡激情三级在线观看| 91国产精品成人| 国产成人在线观看免费网站| 亚洲成av人片在线观看无码| 国产精品对白交换视频| 精品久久99ma| 在线成人小视频| 欧美伊人久久久久久午夜久久久久| 国产一区二区三区综合| 亚洲第一成年网| 亚洲欧美色综合| 国产精品免费丝袜| 国产亚洲午夜高清国产拍精品| 欧美成人一区二区三区片免费 | 9人人澡人人爽人人精品| 激情综合色播激情啊| 奇米一区二区三区| 午夜精品久久久久久久蜜桃app | 丝袜诱惑制服诱惑色一区在线观看 | 麻豆精品久久精品色综合| 亚洲一二三专区| 一区二区三区美女| 亚洲欧美日韩中文播放| 亚洲免费观看高清完整版在线观看熊| 久久精品一区二区三区不卡 | 国产精品色一区二区三区| 久久久五月婷婷| 精品乱码亚洲一区二区不卡| 日韩写真欧美这视频| 制服丝袜中文字幕一区| 欧美人妖巨大在线| 欧美日韩国产一级二级| 这里只有精品免费| 日韩一区二区三区四区| 欧美一级午夜免费电影| 日韩视频一区二区三区在线播放| 欧美精品第一页| 日韩欧美国产一区在线观看| 日韩欧美视频在线| 精品国产污污免费网站入口 | 国产在线一区二区综合免费视频| 麻豆久久久久久久| 国产一区二区三区日韩| 国产精品888| 93久久精品日日躁夜夜躁欧美| 色94色欧美sute亚洲线路一ni | 欧美色图第一页| 欧美高清dvd| 久久人人爽爽爽人久久久| 国产亚洲人成网站| 亚洲青青青在线视频| 亚洲成av人影院| 精品一区二区三区免费观看| 大白屁股一区二区视频| 99国产欧美久久久精品| 欧美精品三级日韩久久| wwwwww.欧美系列| 成人免费在线观看入口| 亚洲电影第三页| 激情偷乱视频一区二区三区| 成人免费毛片aaaaa**| 在线一区二区视频| 日韩天堂在线观看| 国产精品色婷婷| 日本一区中文字幕 | 99精品黄色片免费大全| 欧美老女人在线| 久久精品夜夜夜夜久久| 亚洲卡通欧美制服中文| 奇米亚洲午夜久久精品| av一区二区三区| 欧美日韩精品一区二区三区四区 | 国产精品亲子乱子伦xxxx裸| 亚洲电影视频在线| 大陆成人av片| 日韩精品一区国产麻豆| 亚洲欧洲av在线| 美女脱光内衣内裤视频久久网站| 成人av在线网| 欧美一级在线免费| 亚洲老妇xxxxxx| 国产iv一区二区三区| 欧美日韩高清一区二区| 亚洲欧洲一区二区在线播放| 日韩高清不卡一区二区三区| 91香蕉视频污| 国产丝袜欧美中文另类| 五月综合激情网| 91在线精品秘密一区二区| 日韩欧美亚洲另类制服综合在线| 一区二区在线看| 大桥未久av一区二区三区中文| 日韩欧美在线一区二区三区| 一区二区三区日韩精品视频| 丁香婷婷综合色啪| 精品对白一区国产伦| 亚洲成在人线免费| 在线亚洲精品福利网址导航| 国产精品区一区二区三区| 国产曰批免费观看久久久| 这里只有精品免费| 午夜视频在线观看一区二区 | 亚洲欧洲av一区二区三区久久| 久久se精品一区精品二区| 91精品视频网| 日韩电影一二三区| 欧美午夜精品一区| 亚洲激情av在线| 91在线观看免费视频| 中文无字幕一区二区三区| 韩国理伦片一区二区三区在线播放 | 欧美性大战xxxxx久久久| 亚洲天堂网中文字| 成人av在线电影| 国产精品国产自产拍高清av| 丁香亚洲综合激情啪啪综合| 国产日产精品1区| 国产精品456| 国产无人区一区二区三区| 黄色精品一二区| 久久色在线视频| 国产在线精品不卡| 国产欧美中文在线| 99视频一区二区| 亚洲精品伦理在线| 在线国产电影不卡| 亚洲一区二区三区自拍| 欧美少妇bbb| 天天av天天翘天天综合网| 正在播放亚洲一区| 狠狠色丁香久久婷婷综| 久久九九99视频| 99热精品国产| 一区二区三区美女| 欧美一区二区免费视频| 激情国产一区二区| 中文字幕欧美日韩一区| 99久久综合精品| 亚洲一区二区三区免费视频| 91精品欧美一区二区三区综合在| 日本中文字幕一区二区视频 | 国产精品区一区二区三| 91蜜桃在线免费视频| 午夜亚洲福利老司机| 日韩精品一区二区三区在线播放 | 色噜噜狠狠色综合中国| 亚洲午夜影视影院在线观看| 欧美一卡二卡三卡| 丰满放荡岳乱妇91ww| 亚洲综合色自拍一区| 日韩免费看网站| www.欧美日韩| 婷婷综合五月天|