對VC++一些常見問題的整理(轉自程序員之家論壇)

(1)爲什麼某個類突然在工作區間裏面突然看不見了?

只是類隱藏了,打開FILEVIEW,找到隱藏類的頭文件,隨便敲一下鍵盤的空格鍵,類就會在CLASSVIEW中顯示了

(2)在基於對話框的程序中,一按回車鍵,對話框就沒了。

把確定按紐的缺省屬性前面的對勾去掉,重載OnOk()函數,在OnOk()函數裏註釋掉調用基類的OnOk()函數那行代碼

(3) 爲什麼我的VC6.0自動顯示成員列表功能時有時無?
刪除該項目擴展名爲.ncb文件,重新打開該項目。

(4)孫老師的視頻教程第一課的程序,爲什麼在我機子上不行?

選菜單project->settings...在彈出的對話框中選Link,在最下邊有Project Options,把裏邊的/subsystem:console刪除就可以了

(5)如何幹淨的刪除一個類?

先從workspace中的fileview中刪除對應的.h和.cpp文件;再關閉項目,從實際的文件夾中刪除對應的.h和.cpp文件;再刪除.clw文件。 最後打開項目,rebuild all。

(6)網絡編程一課中的聊天室程序在爲什麼老是綁定失敗?

一般這種問題是端口設置在6000監聽,正好和QQ的端口衝突,多換幾個端口試試就可以了

(7)網絡程序只能在debug運行,release不行,提示錯誤 error LNK2001: unresolved external symbol __imp__WSAStartup@8

在Release下仍然需要添加Ws2_32.lib。

(8)我畫了一條直線但是當窗口最大化時或者被其他窗口覆蓋時,直線不見了,只剩下直線原先存在的窗口

這是因爲窗口重繪,你可以在響應WM_PAINT的OnDraw()函數中添加畫線的代碼

(9)在安裝VC時未安裝MSDN, 自己再用MSDN安裝盤安裝後在VC中按F1無法調用?

修改註冊表是最直接的方法,具體過程如下: 在HKEY_CURRENT_USER/Software/Microsoft/DevStudio/6.0/Help下增加Enable,Filename,State三個主鍵,注意其類型,含義如下:  Enable 類型:DWORD,默認值是1,改變爲0x00000001  Filename 類型:字符串改爲c:/program files/..../MSDev98/help/Msdev.hlp  State 類型:DWORD 默認值爲0,改變爲0x00000001

(10)如何在應用程序中打開一個超級鏈接?

這個問題實際上很簡單,只要使用ShellExecute API函數就行了

(11)如何在沒安裝VC的環境下的機器也能打開運行用MFC編寫的程序?

把編譯模式改爲RELEASE,然後點工程-》設置-》常規,選擇使用MFC作爲靜態連接庫

(12)如何自定義一個消息?

1.#define WM_MY_MESSAGE  WM_USER+1;2.頭文件DECLARE_MESSAGE_MAP()前寫消息響應函數原形;3.在 BEGIN_MESSAGE_MAP添加消息到函數的映射.4.寫函數的實現部分

(13)怎樣改變VC++編輯器默認的顏色?

工具—》選擇—》格式,選中註釋的顏色即可改變。

(14)複製了一段代碼到當前工作空間裏,可是代碼排列很亂,如何調整?

簡單,按下鼠標左鍵拖動鼠標將代碼選擇上,同時按下鍵盤的ALT+F8鍵

(15) _T("Option 1"),_T()是什麼意思?爲什麼要轉換,直接用不可以?

  _T()自動將()內字符串轉成unicode or Multibyte-character or SBCS (ASCII) 根據系統宏定義,爲了將程序與vb等unicode 編碼的程序交互,爲了程序的國際化,爲了..

(16)如何改變視圖的背景色?

你可以通過處理WM_ERASEBKGND消息來改變CView、CFrameWnd或CWnd對象的背景色

(17)如何建立多文檔?

爲了加入對附加文檔類型的支持,你可以在CWinApp派生類中創建和註冊附加CmultiDocTemplate對象。。將一個附加文檔類型加入到MFC程序的一般步驟如下:
用AppWizard來創建一個新的文檔類和視圖類。
用資源編輯器增加新的資源字串來支持新的文檔類。要想知道關於文檔樣板字符串格式的更多內容,請參閱"如何理解文檔樣板字符串"。

用資源編輯器增加附加的應用程序圖標和菜單資源。注意,這些資源中每一個的ID都必須與在步驟2中創建的文檔模板字符串的ID是相同的。這個ID被CmultiDocTemplate類用來識別與附加文檔類型相關的資源。

在應用程序的InitInstance()函數中,創建了另一個CMultiDocTemplate對象並且用CWinApp::AddDocTemplate()函數來註冊。例如:

CMultiDocTemplate* pDocTemplate2 = new CMultiDocTemplate(
  IDR_DOC2TYPE, RUNTIME_CLASS(CDoc2),
  RUNTIME_CLASS(CMDIChildWnd),RUNTIME_CLASS(CView2));
  AddDocTemplate(pDocTemplate2);

最後,將定製的序列化和繪圖代碼加入到你的新文檔和視圖類中。

(18)如何使我的程序在啓動時不創建一個新文檔?






在程序的InitInstance中的ProcessShellCommand函數之前加入: cmdInfo.m_nShellCommand = CCommandLineInf:FileNothing

(19) 如何獲取應用程序的實例句柄?
應用程序的實例句柄保存在CWinApp m_hInstance 中,可以這麼調用AfxGetInstanceHandle獲得句柄.

(20)如何得到程序中其它類的指針(例如框架類,視類,文檔類等等)?

請看此貼:

[轉帖]MFC應用程序中指針的使用

(21)爲什麼創建類的時候我不能直接生成從CDialogBar派生的類?

ClassVizard的確沒有提供這個功能,要從沒有提供的類派生類的時候只能通過手動修改來完成

(22)我用classwizard 給靜態文本框加變量時,爲什麼裏面沒有它的ID??

因爲所有的靜態文本控件的ID都被默認爲了IDC_STATIC,你只需要修改這個ID號就可以了

(23)獲得各種目錄信息
Windows目錄: Use "GetWindowsDirectory"
Windows下的system目錄: Use "GetSystemDirectory"
temp目錄: Use "GetTempPath"
當前目錄: Use "GetCurrentDirectory"

(24)如果讓控制檯應用程序支持MFC類庫?
    可以在控制檯應用程序中include 來引入mfc庫,但是控制檯應用程序缺省是單線程的,mfc是多線程的,爲解決該矛盾,在project setting->c/c++ 選項,選擇code generation,在use run-time library 下拉框中選擇debug multithread。

(25) 我怎樣才能在我的應用程序中循環瀏覽已經打開的文檔?

使用CDocTemplate中未公開的GetFirstDocPosition()和GetNextDoc()函數。

 

(26)才能在我的應用程序中循環瀏覽已經打開的視?

使 用 CDocument 中 未 公 開 的 GetFirstViewPosition() 和 GetNextView() 函 數。

(27)數PreCreateWindow是幹什麼用的?

PreCreateWindow 允 許 你 在 調 用 CreateWindow 之 前 來 改 變 窗 口 屬 性。

(28)該怎樣防止MFC在窗口標題欄上把文檔名預置成應用程序名?

在 PreCreateWindow 函 數 中 刪 除 FWS_PREFIXTITLE 標 志 的 窗 口 樣 式:

    cs.style &= ~FWS_PREFIXTITLE;

 

(29) 我應該怎樣防止MFC在窗口標題欄上添加文檔名?

在 PreCreateWindow 函 數 中 刪 除 FWS_ADDTOTITLE 標 志 的 窗 口 樣 式:

    cs.style &= ~FWS_ADDTOTITLE ;

 

(30) 我應該如何改變視窗口的大小?

因 爲 視 窗 口 實 際 上 是 框 架 窗 口 的 子 窗 口,所 以 你 必 須 改 變 框 架 窗 口 的 大 小,而 不 是 改 變 視 窗 口。使 用 CView 類 中 的 GetParentFrame() 函 數 獲 得 指 向 框 架 窗 口 的 指 針,然 後 調 用 MoveWindow() 函 數 來 改 變 框 架 的 大 小。這 會 使 變 尺 寸 的 視 充 滿 框 架 窗 口。

(31) 我有一無模式對話框。我怎樣才能在窗口退出時刪除CDialog對象?

把“delete this”加 到 PostNcDestroy 中。這 主 要 用 在 需 要 自 動 刪 除 對 象 的 場 合。

 

(32) 爲什麼把“delete this”放在PostNcDestroy中而不是OnNcDestroy?

OnNcDestroy 只 被 已 建 立 的 窗 口 調 用。如 果 建 立 窗 口 失 敗 ( 如 PreCreateWindow ),則 沒 有 窗 口 處 來 發 送 WM_NCDESTROY 消 息。PostNcDestroy 是 在 對 象 窗 口 被 完 全 刪 除,在 OnNcDestroy 後,甚 至 在 窗 口 建 立 失 敗 之 後 調 用 的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章