VC開發應用程式答疑 (轉)

worldblog發表於2007-12-04
VC開發應用程式答疑 (轉)[@more@]VC開發應用答疑
(作者:林琪 2001年01月09日 19:16)

  在的開發工具中,VC仍然是目前最為流行的開發工具,有大量的開發人員利用VC進行專案開發。在開發VC應用程式時,我們會遇到一些常見問題,筆者經過總結,給出了通用的解決方法,希望能對大家有所幫助。

  問:應用程式中往往需要啟動其它的程式執行,如何實現載入,有幾種方法,哪一種比較好?

  答:有三個SDK WinExec, Execute,CreateProcess都可以實現載入。

  其中WinExec最簡單,兩個引數,前一個指定路徑,後一個指定顯示方式,如果顯示方式為SW_SHOWMAXMIZED,此時若載入一個無最大化按鈕的程式,如計算器等等,就不會出現正常的窗體,但在任務列表裡會出現。

  ShellExecute比WinExex靈活,可以指定工作目錄。

  CreateProcess最複雜,一共有十個引數,不過大部分都可以用NULL代替,它可以指定程式的屬性、繼承資訊、類的優先順序等等。

  總之,靈活性與簡單性成反比,你可以依具體情況決定使用哪一個函式。

  問:在CParentView中為WM_LBUTTONDOWN定義了一個控制程式碼,但我建立一個新的CChildView時, 控制程式碼卻得不到處理,為什麼?

  答:很可能在ChildView中的MESSAGE_MAP有問題,特別是用嚮導生成器就很容易會發生這種事情,如匹配 BEGIN_MESSAGE_MAP(Child,Parent)的引數中存在錯誤的基類。

  另外還可以檢查一下訊息映象宏中的類名和父類名是否正確,如果你用自己的訊息控制程式碼手工代替了嚮導所做的,就必須保證沒有寫錯,一個錯誤的引數或者加了一個“const”將會改變訊息映象,從而造成不被正確。

  問:在開發應用程式時,確定應用程式的路徑非常重要,請問如何自動確定應用程式的路徑呢?

  答:可以用GetModuleFileName 來獲得應用程式的路徑,不過這個函式將連同檔名一起返回,當然你只要利用串操作把最後的執行檔名去掉就可以了。

  其實,在程式開發中,還可能用到以下一組目錄,下面列出相應的呼叫函式,希望對你有所幫助。

  目錄:

  GetWindowsDirectory

  Windows下的system目錄:

  GetSystemDirectory

  temp目錄:

  GetTempPath

  當前目錄:

  GetCurrentDirectory

  問:引數往往決定了一些操作屬性,那麼如何在程式中實現系統引數的存取呢?

  答:這裡有一個很關鍵的SDK函式SystemParametersInfo。

  呼叫該函式可以查詢和設定系統引數,諸如按鍵的重複速率設定、滑鼠雙擊延遲時間、圖示字型以及桌面牆紙等等,特別是其中第一個引數決定了對哪一類系統引數的控制,如SPIF_GETICONTITLELOGFONT(圖示標題字型)、SPI_SETDESKWALLPAPER(桌面牆紙)等等。

  不過要說明的是,如果需確定當前螢幕解析度,我們可以直接呼叫SDK函式GetSystemMetrics,該函式可以檢索有關Windows顯示資訊,諸如標題大小、邊界大小以及捲軸大小等等。

  問:在VC開發時,如何控制應用程式提前結束﹖

  答:在程式設計中這是一個經常要遇到的問題,基本思想是向視窗(視窗控制程式碼可以用AfxGetMainWindow函式獲得)傳送 WM_CLOSE訊息,呼叫 CWnd::OnClose成員函式,最好向提示是否儲存修改過的資料。當然還可以用FindWindow函式來找視窗,但這不是一種好方法,因為它需要視窗標題欄內容作為引數,而無法處理標題欄自動改變,這樣在事先不知道標題欄的情況下FindWindow就無能為力了。

  另外如果希望應用程式不停地工作,要避免使用者突然關掉系統,就需要主視窗類中使用訊息WM_QUERYENDSESSION了,你需要完成相應的訊息響應函式。

  問:MFC可以發現,這個特性如何使用呢?

  答:要發現記憶體漏洞,就必須利用De選單中的Go選項,而不是Project選單中的Execute選項,來執行應用程式,這樣MFC會在程式終止時報告記憶體漏洞。如果沒有,那麼試試執行MFCTracer工具程式(在VC++程式組中),並啟動跟蹤,然後返回應用程式。原先的Task Manager應用程式顯示頂層視窗的列表。為了顯示該列表,視窗必須可見、包含一個標題以及不能被其他視窗擁有。呼叫CWnd:: GetWindow可以檢索頂層視窗的列表,呼叫IsWindowVisible、GetOwner以及GetWindowTextLength可以確定視窗是否應該在列表中。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-987996/,如需轉載,請註明出處,否則將追究法律責任。

相關文章