Visual C 程式設計技巧小結

2021-04-02 13:02:08 字數 3638 閱讀 6623

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處進行宣告,也就是常說的"巨集對映"

9. 如何改變視窗的圖示?

向視窗傳送 wm_section訊息。

example:

10. 如何改變視窗的預設風格?

重寫 cwnd:: precreatewindow 並修改createstruct 結構來指定視窗風格和其他建立資訊.

example: delete "max" button and set original window』s position and size

bool cmainframe:: precreatewindow (createstruct &cs)

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

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 的程式設計技巧

山東科技大學智慧型工程研究所 楊在春 何明祥 microsoft visual c 是一種視覺化程式語言,因功能強大而受到廣大程式設計人員的青睞。但是,由於vc 的應用程式框架結構非常複雜,使得許多初學者望而卻步。本文通過對設定檢視背景顏色和改變對話方塊標題的幾種實現方法的分析研究,揭示了vc 程式...

Visual C 的程式設計技巧

microsoft visual c 是一種視覺化程式語言,因功能強大而受到廣大程式設計人員的青睞。但是,由於vc 的應用程式框架結構非常複雜,使得許多初學者望而卻步。本文通過對設定檢視背景顏色和改變對話方塊標題的幾種實現方法的分析研究,揭示了vc 程式 執行時的一些本質特徵和有關的程式設計技巧,對...

Visual C 程式設計技巧之二

9.如何改變視窗的圖示?向視窗傳送wm section訊息。example assert hicon afxgetmainwnd sendmessage wm section,true,lparam hicon 10.如何改變視窗的預設風格?重栽cwnd precreatewindow並修改crea...