VC開發應用程式答疑 (轉)
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可以確定視窗是否應該在列表中。
(作者:林琪 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- VC++串列埠程式設計之簡訊應用開發(轉)C++串列埠程式設計
- 用VC5開發監控介面的方法 (轉)
- Linux下應用程式開發:QT開發簡介(轉)LinuxQT
- 用VC++編寫CGI程式 (轉)C++
- VC實現動畫應用兩則 (轉)動畫
- 利用VC++開發所見即所得的列印程式 (轉)
- 開發 SOA 應用程式
- 用AJAX開發智慧Web應用程式之基礎篇(轉)Web
- 怎樣使用AJAX進行應用程式開發(轉)
- 部署VC2008應用程式
- 應用程式通用開發框架框架
- 用VC++6.0編寫撥號程式 (轉)C++
- 開發Web應用程式中Cookie使用的問題 (轉)WebCookie
- 關於WEB應用程式的列印元件開發初探 (轉)Web元件
- Rational的Linux應用程式開發解決方案(轉)Linux
- 如何讓MFC編寫的應用程式(用VC6.0開發)能在別的電腦上執行
- 利用ASP開發Web應用 (轉)Web
- 使用JAVA開發CORBA應用 (轉)JavaORB
- 用JavaServer Faces開發Web應用(4) (轉)JavaServerWeb
- 用JavaServer Faces開發Web應用(3) (轉)JavaServerWeb
- VC中文FAQ寶庫之5:怎樣載入其他的應用程式 (轉)
- VC++的DLL應用C++
- 用低程式碼開發平臺開發應用可靠嗎
- Linux下應用程式開發:QT的內部程式通訊(轉)LinuxQT
- Linux下應用程式開發:使用QT製作Skin(轉)LinuxQT
- Oracle應用Linux開發C(轉)OracleLinux
- 【轉載】App Inventor 開發BLE應用APP
- 低程式碼應用程式開發開始興起
- 從遊戲開發到應用開發的轉變遊戲開發
- VC++ ADO開發實踐之三 (轉)C++
- VC++ ADO開發實踐之五 (轉)C++
- VC++ ADO開發實踐之六 (轉)C++
- VC++ ADO開發實踐之四 (轉)C++
- VC++ ADO開發實踐之七 (轉)C++
- 在零程式碼開發平臺上如何開發應用程式
- Linux程式應用開發環境和工具經驗談(轉)Linux開發環境
- Linux下應用程式開發:QT中使用圖形庫(轉)LinuxQT
- 移動應用程式開發簡介!