日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言control表题目,CMFCControl 问题

發布時間:2023/12/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言control表题目,CMFCControl 问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

解決CMFCMenuButton無法顯示右邊箭頭以及多字節編碼下堆破壞的問題

有時候覺得MFC真TM惡心,就這兩個問題花了我好長時間才找到解決辦法,記下來以避免搞忘,如果能給讀者帶來方便那是更好,廢話不多說,說正事!

1.無法顯示右邊箭頭的問題(Can't?load?bitmap:?42b8.?GetLastError()?=?716?有時)

無論怎么折騰都沒顯示不出來,微軟給的示例又能顯示,度娘和谷歌也都不知道,經過不斷地探索總算找到解決辦法了:在rc2文件中加上下面的內容即可

#ifndef?_AFXDLL//許多其他CMFCCOntrol類型的問題?都需要此處更改

#include?"afxribbon.rc"??????//?Ribbon?and?control?bars

#endif

當然,要想按鈕有XP的風格,還需要在App類的InitInstance中加上

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));

然而這樣在關閉程序時會發現有內存泄漏,輸出窗口中出現如下內容:

Init?CriticalSection?spin?count?CDLPShareMemConfig::Close()CDLPShareMemConfig::Close()TSWebDownLoadProtect.dll?is?Load?failedTSWebMon.dat?is?Load?failedDetected?memory?leaks!

Dumping?objects?->

f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\afxvisualmanagerwindows.cpp(35)?:?{487}?client?block?at?0x001C9318,?subtype?c0,?376?bytes?long.

a?CMFCVisualManagerWindows?object?at?$001C9318,?376?bytes?long

Object?dump?complete.

顯然,這是由于RUNTIME_CLASS(CMFCVisualManagerWindows)動態創建了一個CMFCVisualManagerWindows的實例沒有釋放,不知道CMFCVisualManager在搞什么,在吃SHI嗎,還需要我們手動釋放,既然它不作為,那我們只有自己干了,在ExitInstance中加上CMFCVisualManagerWindows::DestroyInstance();就好了

2.?多字節編碼下堆破壞

如果你建的項目是使用的Unicode編碼,那么在Debug模式下沒有問題,Release模式下同樣會出現堆破壞的錯誤,程序根本沒法啟動!如果是多字節編碼,那么對不起,任何模式都不行,不知道MFC怎么搞的!

沒辦法,總得知道原因出在哪里吧,找到MFC的源碼(源碼怎么找相信大家都知道,就在VS安裝目錄下\VC\atlmfc\src\mfc下面,查找包含CMFCMenuButton字符串的文件,怎么搜索不用我說了吧,在Win7下改一下搜索選項就可以了),在OnDraw里面打斷點,發現問題出在CMFCButton::OnDraw那一行,繼續調CMFCButton::OnDraw,發現問題出在GetWindowText,用一個大一點的緩沖區來存獲得的文本吧,發現文本后面被填入了"\0?MFCMenuButton",乖乖,多出這么長一截,堆能不被破壞嗎?

解決辦法有兩個:

(1)重載CMFCMenuButton,自己實現OnDraw(可以將CMFCButton和CMFCMenuButton的OnDraw合并起來),在GetWindowText那里自己分配一個大一點的緩沖區就行了;這種辦法太笨拙了,不推薦。

(2)不寫任何代碼,直接將Button控件拖入到對話框中,添加變量時變量類型改成CMFCMenuButton就可以了,只不過需要自己設置按鈕的一些屬性。

好了,就這么多,如果誰有更好的解決辦法請指教!

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的c语言control表题目,CMFCControl 问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。