VC知識庫之應用控制

2021-04-09 01:39:28 字數 3124 閱讀 3079

一、如何在程式中獲得其他程式的圖示?

void chsview::ondraw(cdc* pdc)

chsdoc* pdoc = getdocument();

assert_valid(pdoc);

// todo: add draw code for native data here

}二、如何程式設計結束應用程式?

afxgetmainwnd()->sendmessage(wm_close);

三、如何獲得應用程式的例項控制代碼?

handle hinstance=afxgetinstancehandle();

四、怎樣載入其他的應用程式?

三個sdk函式 winexec, shellexecute,createprocess可以使用。winexec最簡單,兩個引數,前乙個指定路徑,後乙個指定顯示方式.後乙個引數值得說一下,比如泥用 sw_showmaxmized方式去載入乙個無最大化按鈕的程式,就是neterm,calc等等,就不會出現正常的窗體,但是已經被加到任務列表裡了。

winexec("d://powerword 2006//xdict.exe",sw_showmaximized);

shellexecute較 winexex靈活一點,可以指定工作目錄,下面的example就是直接開啟 c:/temp/1.txt,而不用載入與 txt檔案關聯的應用程式,很多安裝程式完成後都會開啟乙個視窗,來顯示readme or faq,我猜就是這麼作的啦.

shellexecute(null,null,_t("1.txt"),null,_t("c://temp"),sw_showmaxmized)

注意:c://temp//1.txt必須存在才能開啟

createprocess最複雜,一共有十個引數,不過大部分都可以用null代替,它可以指定程序的安全屬性,繼承資訊,類的優先順序等等.來看個很簡單的example:

startupinfo stinfo

//啟動視窗的資訊

processinfo procinfo //程序的資訊

createprocess(null,_t("notepad.exe"),null,null,false,normal_priority_ class,null,null, &stinfo,&procinfo)

五、確定應用程式的路徑?

tchar exefullpath[max_path]; // 

getmodulefilename(null,exefullpath,max_path); // exefullpath的內容就是函式返回的結果

六、獲得各種目錄資訊

windows目錄: use "getwindowsdirectory"

windows下的system目錄: use "getsystemdirectory"

temp目錄: use "gettemppath"

當前目錄: use "getcurrentdirectory"

請注意前兩個函式的第乙個引數為目錄變數名,後乙個為緩衝區後兩個相反 

tchar exefullpath[max_path];

getwindowsdirectory(exefullpath,max_path);

getsystemdirectory(exefullpath,max_path);

gettemppath(max_path,exefullpath);

getcurrentdirectory(max_path,exefullpath);

可以按f5逐步除錯,觀察exefullpath值的變化.

七、如何訪問預定義的gdi物件

void chsview::ondraw(cdc* pdc)

//也可以呼叫新的sdk函式getsyscolorbrush獲取乙個系統顏色刷子,下例用背景色在視窗中畫乙個橢圓:

void chsview::ondraw(cdc* pdc)

八、當向列表框中新增多個項時如何防止閃爍

//disable redrawing.

plistbox->setredraw (false);

//fill in the list box gere

//enable drwing and make sure list box is redrawn.

plistbox->setredraw (true);

plistbox->invalidate ();

九、如何更新翻轉背景顏色的文字

呼叫cdc:: setbkmode並傳送opaque用當前的背景顏色填充背景,或者呼叫cdc::setbkmode並傳送transpaarent使背景保持不變,這兩種方法都可以設定背景模式。下例設定背景模式為transparent,可以兩次更新串,用花色帶黑陰影更新文字。黑色串在紅色串之後,但由於設定了背景模式仍然可見

void chsview::ondraw(cdc* pdc)

十、如何檢索原先的task manager應用程式使用的任務列表

原先的task manager應用程式顯示頂層視窗的列表。為了顯示該列表,視窗必須可見、包含乙個標題以及不能被其他視窗擁有。呼叫cwnd:: getwindow可以檢索頂層視窗的列表,呼叫iswindowvisible、getwindowtextlength以及getowner可以確定視窗是否應該在列表中。下例將把taskmanager視窗的標題填充到列表中。

void gettadklist(clistbox *list)

// get next window in window list.

pwnd = pwnd->getwindow(gw_hwndnext);}}

void caboutdlg::onbutton1()

十一、messagebox與afxmessagebox的區別:

在我的程式的某些部分,我可以呼叫 messagebox 函式來建立乙個資訊對話方塊,例如在視類中。但是,在其它部分我卻不能,如文件類中。為什麼?我怎樣才能在我的應用程式類中建立乙個資訊對話方塊?

messagebox函式來自cwnd類,所以你只能在從cwnd繼承的類( 如cview )中呼叫它。但是,mfc 也提供了 afxmessagebox 函式,你可以在任何地方呼叫它。 十

二、虛函式precreatewindow是幹什麼用的?

precreatewindow 允許你在呼叫 createwindow 之前來改變視窗屬性。 

打造「個人知識庫」

在以前舉辦的巡迴講座時有許多讀得就問到同乙個問題,就是如何有效記往這些平常在工作摸索或者從書中,或與交流中得到的經驗與方法。說經常在工作遇到某些問題似曾相識,卻想不起以前的解決方法了,很是苦惱。其實這是每個人都會遇到的,不是個人問題。特別是對於我們網管這個行業,所涉及的知識面非常廣,可以說沒有人能把...

知識庫 編號 011

61 人體中最先衰老的器官是 d 胸腺 62 最耐日曬的織品是哪一種?a 腈綸 63 歐元什麼時候正式誕生?2 1999年1月1日 64 心比天高,身為下賤 是 紅樓夢 中對誰的判詞?1 睛雯 65 冬天到了,春天還會遠嗎 語出 4 雪萊 66 下面乾果中脂肪含量最高的是 5 核桃仁 67 除夏威夷...

打造「個人知識庫」

在以前舉辦的巡迴講座時有許多讀得就問到同乙個問題,就是如何有效記往這些平常在工作摸索或者從書中,或與交流中得到的經驗與方法。說經常在工作遇到某些問題似曾相識,卻想不起以前的解決方法了,很是苦惱。其實這是每個人都會遇到的,不是個人問題。特別是對於我們網管這個行業,所涉及的知識面非常廣,可以說沒有人能把...