程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> VC開發應用程序答疑

VC開發應用程序答疑

編輯:vc教程

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

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

  答:有三個SDK函數 WinExec, ShellExecute,CreateProcess都可以實現加載。

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

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

  CreateProcess最復雜,一共有十個參數,不過大部分都可以用NULL代替,它可以指定進程的安全屬性、繼承信息、類的優先級等等。

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

  問:在CParentView中為WM_LBUTTONDOWN定義了一個句柄,但我建立一個新的CChildVIEw時, 句柄卻得不到處理,為什麼?

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

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

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

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

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

  Windows目錄:

  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可以發現內存漏洞,這個特性如何使用呢?

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

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved