visual c++程式設計技巧之一
1. 如何獲取應用程式的例項控制代碼?
2. 如何通過**獲得應用程式主視窗的指標?
3.如何在程式中獲得其他程式的 圖示?
4.如何程式設計結束應用程式
?如何程式設計控制
windows
的重新引導?
5.怎樣加栽其他的應用程式?
6. 確定應用程式的 路徑
7. 獲得各種目錄資訊
8. 如何自定義訊息
1.
如何獲取應用程式的例項控制代碼
?
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)
} example(2):同樣功能,use extracticon function
void csampleview:: ondraw(cdc *pdc)
說明: 獲得notepad.exe的路徑正規上來說用getwindowsdirectory 函式得到,如果是呼叫 win95下的畫筆,應該用訪問登錄檔的方法獲得其路徑,要作成乙個比較考究的程式,考慮應該全面點.
4.
如何程式設計結束應用程式
?如何程式設計控制
windows
的重新引導
?
這是個很簡單又是程式設計中經常要遇到的問題.
第一問,向視窗傳送 wm_close訊息,呼叫 cwnd::onclose成員函式.允許對使用者提示
是否儲存修改過的資料.
example: afxgetmainwindow()->sendmessage(wm_close);
還可以建立乙個自定義的函式 terminate window
void terminate window(lpcstr pcaption)
說明: findwindow函式不是提倡的做法,因為它無法處理標題欄自動改變,比如我們要檢測 notepad是不是已執行而事先不知道notepad的標題欄,這時 findwindow就無能為力了,可以通過列舉 windows任務列表的辦法來實現。 在 機械出版社"windows 95 api開發人員指南"一書有比較詳細的介紹,這裡就不再多說樂。
第二問,use exitwindow*** 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 程式設計技巧之一和二
1.如何獲取應用程式的例項控制代碼?2.如何通過 獲得應用程式主視窗的指標?3.如何在程式中獲得其他程式的圖示?4.如何程式設計結束應用程式?如何程式設計控制windows的重新引導?5.怎樣加栽其他的應用程式?6.確定應用程式的 路徑 7.獲得各種目錄資訊 8.如何自定義訊息 9.如何改變視窗的圖...
Visual C 程式設計技巧小結
example handle hinstance afxgetinstancehandle 2.如何通過 獲得應用程式主視窗的指標?主視窗的 指標儲存在cwinthread m pmainwnd中,呼叫 afxgetmainwnd實現。afxgetmainwnd showwindow sw show...
Visual C 的程式設計技巧
山東科技大學智慧型工程研究所 楊在春 何明祥 microsoft visual c 是一種視覺化程式語言,因功能強大而受到廣大程式設計人員的青睞。但是,由於vc 的應用程式框架結構非常複雜,使得許多初學者望而卻步。本文通過對設定檢視背景顏色和改變對話方塊標題的幾種實現方法的分析研究,揭示了vc 程式...