1. 如何獲取應用程式的例項控制代碼?
2. 如何通過**獲得應用程式主視窗的指標?
3.如何在程式中獲得其他程式的圖示?
4.如何程式設計結束應用程式?如何程式設計控制windows的重新引導?
5.怎樣加栽其他的應用程式?
6. 確定應用程式的 路徑
7. 獲得各種目錄資訊
8. 如何自定義訊息
9. 如何改變視窗的圖示?
10. 如何改變視窗的預設風格?
11. 如何將視窗居中顯示?
12. 如何讓視窗和 mdi視窗一啟動就最大化和最小化?
13. 如何使程式保持極小狀態?
14. 如何限制視窗的大小?
15. 如何使視窗不可見?
16. 如何使視窗始終在最前方?
13.如何在程式中獲得其他程式的 圖示?
兩種方法:
(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處進行宣告,也就是常說的
"巨集對映"
9. 如何改變視窗的圖示?
向視窗傳送 wm_section訊息。
example:
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)
11. 如何將視窗居中顯示?
easy, call function cwnd:: center windows
example(1): center window( ); //relative to it's parent
// relative to screen
afxgetmainwnd( ) -> center window( );
12. 如何讓視窗和 mdi視窗一啟動就最大化和最小化?
先說視窗。在 initstance 函式中設定 m_ncmdshow的 取值.
m_ncmdshow=sw_showmaxmized ; //最大化
m_ncmdshow=sw_showminmized ; //最小化
m_ncmdshow=sw_shownormal ; //正常方式
bool cmainframe:: onqueryopen( )
14. 如何限制視窗的大小?
也就是 fixeddialog形式。 windows 傳送 wm_getmaxmininfo訊息來跟蹤,響應它,在 ongetmaxmininfo 中寫**:
15. 如何使視窗不可見?
很簡單,用sw_hide 隱藏視窗,可以結合 findwindow,showwindow 控制.
16. 如何使視窗始終在最前方?
兩種途徑.
bringwindowtotop(handle);
setwindowpos函式,指定視窗的 最頂風格,用ws_ex_topmost擴充套件視窗的 風格
example:
void toggletopmost( cwnd *pwnd)
Visual C 程式設計技巧之一
visual c 程式設計技巧之一 1.如何獲取應用程式的例項控制代碼?2.如何通過 獲得應用程式主視窗的指標?3.如何在程式中獲得其他程式的 圖示?4.如何程式設計結束應用程式 如何程式設計控制 windows 的重新引導?5.怎樣加栽其他的應用程式?6.確定應用程式的 路徑 7.獲得各種目錄資訊...
Visual C 程式設計技巧之二
9.如何改變視窗的圖示?向視窗傳送wm section訊息。example assert hicon afxgetmainwnd sendmessage wm section,true,lparam hicon 10.如何改變視窗的預設風格?重栽cwnd precreatewindow並修改crea...
Visual C 程式設計技巧之五和六
33 如何獲取乙個對話控制項的指標 34 如何禁止和使能控制項 35 如何改變控制項的字型 36 如何在ole控制項中使用ole color資料型別 37 在不使用通用檔案開啟對話的情況下如何顯示乙個檔案列表 38 為什麼旋轉按鈕控制項看起來倒轉 39 為什麼旋轉按鈕控制項不能自動地更新它下面的編輯...