MFC控件一些不常见的用法

一、分隔线

用Picture控件,拖动使其高度(或宽度)变为1,属性里Type设置为Frame,Color设置为Etched即可。

用GroupBox和分隔符组合使用可以做出相对美观的界面,当然也可以使用多个GroupBox使其边缘重叠,看上去就你分隔线的效果。

二、CTreeCtrl的用法

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

三、利用CImage在控件上动态显示图片

#include

	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);





你可能感兴趣的:(MFC/QT)