MFC控制元件一些不常見的用法

anda0109發表於2014-10-16

一、分隔線

用Picture控制元件,拖動使其高度(或寬度)變為1,屬性裡Type設定為Frame,Color設定為Etched即可。

用GroupBox和分隔符組合使用可以做出相對美觀的介面,當然也可以使用多個GroupBox使其邊緣重疊,看上去就你分隔線的效果。

二、CTreeCtrl的用法

http://blog.csdn.net/shuilan0066/article/details/6638504

三、利用CImage在控制元件上動態顯示圖片

#include <atlimage.h>

	RECT rect; 
	GetDlgItem(IDC_STC_VERIFYCODE)->GetClientRect(&rect);//獲得顯示控制元件的RECT 

	CDC* pDC =GetDlgItem(IDC_STC_VERIFYCODE)->GetDC();//獲得顯示控制元件的DC 

	CImage image; //使用圖片類  
	image.Load( L"verifycode.png"); //裝載路徑下圖片資訊到圖片類
	image.Draw( pDC->m_hDC,rect); //圖片類的圖片繪製Draw函式  
	ReleaseDC( pDC );

四、CListCtrl的用法

	DWORD dwStyle = m_list_ctrl.GetExtendedStyle();
	dwStyle |= LVS_EX_FULLROWSELECT;//選中某行使整行高亮(只適用與report風格的listctrl)
	dwStyle |= LVS_EX_GRIDLINES;//網格線(只適用與report風格的listctrl)
	dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控制元件
	m_list_ctrl.SetExtendedStyle(dwStyle); //設定擴充套件風格

	m_list_ctrl.InsertColumn( 0, "程式ID", LVCFMT_LEFT, 140 );//插入列
	m_list_ctrl.InsertColumn( 1, "程式名", LVCFMT_LEFT, 140 );//插入列
	m_list_ctrl.InsertColumn( 2, "執行緒數", LVCFMT_LEFT, 140 );//插入列
	
	//插入一行資料
	int nRow=m_list_ctrl.InsertItem(0,"1056");//插入行
	m_list_ctrl.SetItemText(nRow, 1, "QQ.exe");//設定第一列資料
	m_list_ctrl.SetItemText(nRow, 2, "58");//設定第二列資料

五、MFC中避免視窗重繪導致視窗閃爍的方法

思路:先建立一個視窗相容的記憶體DC,使用記憶體DC畫圖,然後將記憶體DC複製到視窗DC中

//在指定的視窗CWnd * pWnd中畫圖
void CRecoDemoDlg::WndPaint(CWnd * pWnd)
{
	//1、獲取視窗dc及視窗RECT
	CDC* pWndDC=pWnd->GetDC();//獲得指定視窗的dc
	RECT rect;
	pWnd->GetClientRect(&rect);//獲得指定視窗的Rect

	//2、建立相容記憶體dc
	CDC MemDC;
	MemDC.CreateCompatibleDC(pWndDC);//建立相容視窗dc的記憶體dc

	//3、建立相容點陣圖,讓記憶體dc輸出到點陣圖
	CBitmap MemBitmap;
	MemBitmap.CreateCompatibleBitmap(pWndDC,rect.right-rect.left,rect.bottom-rect.top);//建立相容點陣圖
	MemDC.SelectObject(MemBitmap);//讓記憶體dc輸出到點陣圖

	//4、使用記憶體dc畫圖,這裡是顯示一張圖片
	CImage image; //使用圖片類    
	image.Load( m_ImgFileName); //裝載路徑下圖片資訊到圖片類  
	image.Draw( MemDC.m_hDC,rect); //圖片類的圖片繪製函式Draw

	//5、將記憶體dc複製到視窗dc
	pWndDC->BitBlt(0,0,rect.right-rect.left,rect.bottom-rect.top,&MemDC,0,0,SRCCOPY);

	//6、釋放dc
	ReleaseDC( &MemDC );
	ReleaseDC(pWndDC);
}

六、從右下角升起的彈窗

// 在OnInitDialog()中新增

// 示例

// 獲得桌面大小
CRect rectWorkArea;
SystemParametersInfo(SPI_GETWORKAREA,0,&rectWorkArea,SPIF_SENDCHANGE);   

// 獲得對話方塊大小
CRect rectDlg;
GetWindowRect(&rectDlg);
int nW = rectDlg.Width();
int nH = rectDlg.Height();

// 將視窗設定到右下角
::SetWindowPos(GetSafeHwnd(),HWND_BOTTOM,rectWorkArea.right-nW-20,rectWorkArea.bottom-nH,nW,nH,SWP_NOZORDER);

// 動畫顯示彈窗效果
AnimateWindow(GetSafeHwnd(),800,AW_SLIDE|AW_VER_NEGATIVE);





相關文章