(转)MFC技巧学习五
51. 如何獲得其他程序的圖標,并顯示在View中
[問題提出]
有的時候,如:類資源管理器會遇到獲得程序圖標并顯示的操作,如何實現呢?
[解決方法]
SDK函數SHGetFileInfo來獲得有關文件的很多信息:如大小圖標,屬性,類型等.
[程序實現]
建立名為My的SDI工程.在OnPaint()函數中加入:
說明:_T("NotePad.exe")指的是要獲得什么程序的圖標.
或者在OnDraw()中(此時必須保證沒有OnPaint()函數,想想為何?)
52 .RichEdit
在Dialog(FormView中打開)中加入CRichEdit控件后,這個dialog 為什么打不開如何處理?
[解決方法]
在函數:InitInstance的第一句加入AfxInitRichEdit();
53. 如何使FormView中顯示dialog時,不是凹的?
[問題提出]
為什么FormView中顯示dialog時,是凹的,能不能不這樣
[解決方法]
在Dialog的屬性中:
增加屬性WS_BORDER 或者 WS_EX_WINDOWEDGE
用程序實現:
pView->ModifyStyle(,WS_BORDER) 或者pView->ModifyStyleEx(,WS_EX_WINDOWEDGE )
54. 如何改變窗口標題?
[問題提出]
在應用程序的不同運行時期,要反映當前狀態往往會修改應用程序標題.
[解決方法]
在MFC類庫中提供了CWnd::SetWindowText函數,通過該函數可以改變任何窗體(包括控件)的標題.
改變主窗體的標題:
當改變多視MDI的子窗口的標題時,用:
當改變按鈕的標題時(假設按鈕的ID=IDC_BUTTON1):
運行看看.
55.圖標透明
(1).Windows中的圖標其實是有兩個圖像組成的,其中一個用于與它要顯示的位置的圖像做“AND”操作,另一個作“XOR”操作。
透明:用“白色”AND,用“黑色”XOR
反色:用“白色”AND,用“白色”XOR
正常色:用“黑色”AND,用正常顏色XOR.
(2). WIN9X中好像是對像素的操作實現透明的
WIN2K中就有API直接實現透明了!
WIN2K中
GetWindowLong
SetWindowLong
SetLayeredWindowAttributes
三個API就可以實現透明了!
(3)
56.ASSERT()是干什么用的
ASSERT()是一個調試程序時經常使用的宏,在程序運行時它計算括號內的表達式,如果表達式為FALSE (0), 程序將報告錯誤,并終止執行。如果表達式不為0,則繼續執行后面的語句。這個宏通常原來判斷程序中是否出現了明顯非法的數據,如果出現了終止程序以免導致嚴重后果,同時也便于查找錯誤。例如,變量n在程序中不應該為0,如果為0可能導致錯誤,你可以這樣寫程序:
......
ASSERT( n != 0);
k = 10/ n;
......
ASSERT只有在Debug版本中才有效,如果編譯為Release版本則被忽略。
assert()的功能類似,它是ANSI C標準中規定的函數,它與ASSERT的一個重要區別是可以用在Release版本中。
56. 將RADIO控件初始狀態設置成為選中
1、"在OnInitialDialog中用CButton::CheckRadioButton(...)
2、"在OnInitialDialog中用CButton::SetCheck(...)
3、"關聯一個整型值,在構造函數中設為0。
57.獲得視圖
58.如何得到屏幕的真實尺寸
[問題提出]
我的屏幕是1024*800,如何得到屏幕的真實大小,我用GetSystemMetrics(SM_CYFULLSCREEN)得到的高度總是小于800
[問題解答]
GetSystemMetrics(SM_CYFULLSCREEN)得到的只是屏幕用戶區的大小。要得到屏幕的真實大小需要使用
GetDeviceCaps函數,該API函數原型是這樣的:
int GetDeviceCaps(
HDC hdc, // handle to DC
int nIndex // index of capability
);
59. 修改標題欄高度
NONCLIENTMETRICS nm
調用SystemParametersInfo(SPI_GETNONCLIENTMETRICS,sizeof(nm),&nm,0)
重設SystemParametersInfo(SPI_SETNONCLIENTMETRICS,sizeof(nm),&nm,0)
60. 如何實現“氣球式”工具提示。
本程序介紹一個與CToolTipCtrl相似的類CTooolTipWnd。
使用該類的方法如下:
1. 增加ToolTipWnd.cpp到工程文件。
2. 在頭文件中添加#include "ToolTipWnd.h" 。
3. 在類聲明中添加:
CToolTipWnd m_BalloonToolTip;
4. 在OnInitDialog(對話框)或OnInitialUpdate(表單視)中添加下面代碼:
第三個參數為可選,缺省為RGB(0, 0, 0)。缺省文本顏色可以用SetDefTextColor進行設置。
4. 重載PreTranslateMessage并添加下面代碼:
?
61. dlg 上建立View的方法:
62. 窗口最大化、最小化及關閉的消息是什么?如何截獲?
最大化、最小化將發送WM_SYSCOMMAND消息。要處理該消息,可以這么做:
1、在Form的頭文件中添加:
2、在Form的單元文件中添加:
關閉窗口的消息為WM_CLOSE,C++Builder提供了OnClose事件。
63. 如何遍歷整個目錄樹查找文件
在應用程序的開發過程中,會遇到如何查找某一文件以確定此文件路徑的問題。利用CFileFind類可以比較方便地在當前目錄下進行文件查找,但卻不能對其子目錄中的文件進行搜尋。而實際應用中往往需要對某一整個目錄樹,甚至是整個C盤或D盤驅動器進行文件搜尋。通過實踐,我們在Visual C++ 6.0中編程實現了如何遍歷任意目錄樹,以查找某一特定的文件。
在下面的具體陳述中可以看到,在確定要查找的文件名和要進行搜索的目錄的名稱后,將調用函數Search_Directory進行文件的查找。首先依次查找當前目錄下的每一個實體(文件或是子目錄),如果是某一子目錄,則進入該子目錄并遞歸調用函數Search_Dirctory進行查找,查找完畢之后, 再返回上一級目錄;如果不是子目錄而是某一文件,則判斷其是否就是我們要查找的文件,如果是則輸出其完整的文件路徑。這樣,通過Search_Directory函數的反復遞歸調用,就可以實現對整個目錄,包括子目錄的遍歷搜索。下面將舉例詳細講述如何在VC++中編程實現在整個目錄樹中的文件查找。
1. 在Visual C++ 6.0(VC++ 5.0與之類似)中用默認方式創建了一基于對話框的應用程序Search。在主窗口對話框上放置一命令按鈕,其Caption為“Search File”,ID為ID_BUTTON_SEARCH。單擊此按鈕將完成文件的查找工作。
2. 利用ClassWizard為“Search File”按鈕的BN_CLICKED 事件添加處理函數OnButtonSearch,代碼如下:
3. 在CSearchDlg類中增加成員函數Search_Directory,它將完成具體的文件查找工作,代碼如下:
這樣我們就可以對整個目錄進行遍歷搜索,查找某一特定的文件,并輸出顯示其完整的文件路徑。以上的程序在Visual C++ 6.0中已調試通過。
64. Richedit control的設置背景圖片辦法
1:繼承CRichEditCtrl::OnEraseBkgnd(CDC* pDC)消息事件中,給Richedit控件繪制上背景圖片:
m_bmpBackground.DrawDIB(pDC, 0, 0, rc.Width(), rc.Height());
當然也可以通過subclass richedit window之后,在回調函數中處理WM_ERASEBKGND消息。
2:設置了Richedit控件的透明屬性;
3:依照kenwhale所說的,Hook了GDI32.DLL中的ExtTextOut函數,將RichEdit的text-output options去除ETO_OPAQUE style。綜上所述,即可實現RichEdit控件的背景圖片效果。
據此,我還實現了RichEdit控件背景繪制AVI動畫效果。
65. MFC程序中如何創建多級目錄
轉載于:https://www.cnblogs.com/leven20061001/archive/2012/10/17/2728176.html
總結
以上是生活随笔為你收集整理的(转)MFC技巧学习五的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: foreach语句的的解析
- 下一篇: Oracle ORA-07445 [ev