MFC界面

1.static透明

添加WM_CTLCOLOR消息的处理函数,然后添加如下代码

if (nCtlColor == CTLCOLOR_STATIC)
	{
		for (int i = 0; i < sizeof(m_staticText);i++)
		{
			if (pWnd->GetDlgCtrlID() == m_staticText[i])//m_staticText是存放static ID的数组
			{
				pDC->SetBkMode(TRANSPARENT);
				pDC->SetTextColor(RGB(255, 255, 255));
				return (HBRUSH)GetStockObject(HOLLOW_BRUSH);
			}
		}
	}

2.窗口背景透明

添加WM_PAINT消息处理函数,添加如下代码

	CRect   rect;
	GetClientRect(&rect);    //获取对话框长宽      
	CDC   dcBmp;             //定义并创建一个内存设备环境
	dcBmp.CreateCompatibleDC(&dc);             //创建兼容性DC
	CBitmap   bmpBackground;
	bmpBackground.LoadBitmap(IDB_BITMAP_BACK_GROUND);    //载入资源中图片
	BITMAP   m_bitmap;                         //图片变量               
	bmpBackground.GetBitmap(&m_bitmap);
	//将位图选入临时内存设备环境
	CBitmap  *pbmpOld = dcBmp.SelectObject(&bmpBackground);
	//调用函数显示图片StretchBlt显示形状可变
	dc.StretchBlt(0, 0, rect.Width(), rect.Height(), &dcBmp, 0, 0, m_bitmap.bmWidth, m_bitmap.bmHeight, SRCCOPY);

3.为pushbutton添加bitmap,按下和弹起效果

①、将bitmap添加到res资源中
②、在OnInitDialog函数添加如下代码

	m_btnExit.LoadBitmaps(IDB_BITMAP_BACKUP_UP, IDB_BITMAP_BACKUP_DOWN, IDB_BITMAP_BACKUP_UP, IDB_BITMAP_BACKUP_UP);
	m_btnExit.SubclassDlgItem(IDC_BTN_SYSTEM_EXIT, this);//button ID
	m_btnExit.SizeToContent();

4.窗口全屏自适应

  • 在OnInitDialog函数添加如下代码
CRect rect;
GetClientRect(&rect);
old.x = rect.right - rect.left;
old.y = rect.bottom - rect.top;
WINDOWPLACEMENT m_struOldWndpl;
//get current system resolution
int g_iCurScreenWidth = GetSystemMetrics(SM_CXSCREEN);
int g_iCurScreenHeight = GetSystemMetrics(SM_CYSCREEN);

//for full screen while backplay
GetWindowPlacement(&m_struOldWndpl);

CRect rectWholeDlg;//entire client(including title bar)
CRect rectClient;//client area(not including title bar)
CRect rectFullScreen;
GetWindowRect(&rectWholeDlg);
RepositionBars(0, 0xffff, AFX_IDW_PANE_FIRST, reposQuery, &rectClient);
ClientToScreen(&rectClient);

rectFullScreen.left = rectWholeDlg.left - rectClient.left;
rectFullScreen.top = rectWholeDlg.top - rectClient.top;
rectFullScreen.right = rectWholeDlg.right + g_iCurScreenWidth - rectClient.right;
rectFullScreen.bottom = rectWholeDlg.bottom + g_iCurScreenHeight - rectClient.bottom - 30;//避免覆盖windows底部状态栏
//enter into full screen;
WINDOWPLACEMENT struWndpl;
struWndpl.length = sizeof(WINDOWPLACEMENT);
struWndpl.flags = 0;
struWndpl.showCmd = SW_SHOWNORMAL;
struWndpl.rcNormalPosition = rectFullScreen;
SetWindowPlacement(&struWndpl);
  • 添加WM_SIZE消息处理函数并添加如下代码
float fsp[2];
POINT Newp; //获取现在对话框的大小
CRect recta;
GetClientRect(&recta);     //取客户区大小  
Newp.x = recta.right - recta.left;
Newp.y = recta.bottom - recta.top;
fsp[0] = (float)Newp.x / old.x;
fsp[1] = (float)Newp.y / old.y;
CRect Rect;
int woc;
CPoint OldTLPoint, TLPoint; //左上角
CPoint OldBRPoint, BRPoint; //右下角
HWND  hwndChild = ::GetWindow(m_hWnd, GW_CHILD);  //列出所有控件  
int comboDis = 0;

while (hwndChild)
{
	woc = ::GetDlgCtrlID(hwndChild);//取得ID
	comboDis = 0;
	TCHAR szClass[64 + 1] = { 0 };
	if (GetClassName(hwndChild, szClass, 64)
		&& _tcsicmp(szClass, _T("COMBOBOX")) == 0) //判断是否是COMBOBOX控件
	{
		//::SendMessage(hwndChild, CB_SETITEMHEIGHT, 0, Rect.Height() + 200);
		comboDis = 90;//修改combox的大小
	}
	else
	{
		
	}
	GetDlgItem(woc)->GetWindowRect(Rect);
	ScreenToClient(Rect);
	OldTLPoint = Rect.TopLeft();
	TLPoint.x = long(OldTLPoint.x*fsp[0]);
	TLPoint.y = long(OldTLPoint.y*fsp[1]);
	OldBRPoint = Rect.BottomRight();
	BRPoint.x = long(OldBRPoint.x *fsp[0]);
	BRPoint.y = long(OldBRPoint.y *fsp[1]+comboDis);
	Rect.SetRect(TLPoint, BRPoint);
	GetDlgItem(woc)->MoveWindow(Rect, TRUE);
	hwndChild = ::GetWindow(hwndChild, GW_HWNDNEXT);
}
old = Newp;

5.重绘标题栏的想法

https://blog.csdn.net/shenya1314/article/details/71172519
还没有自己试过,先留着参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MFC自定义界面HUI,高效简单,含详细注释和示例。 HUI包括基本控件、按钮、标签、编辑框、表格、悬停提示等,可组合出更多功能。资源占用少,效率高,能在低端机上运行,流畅不闪烁,完全满足工控等各种专业软件实现个性化要求。 本资源是“http://download.csdn.net/detail/hhhh63/6961889”的正式发布版。包括3个项目,Hui、HuiDemo1和HuiDemo2。 一、Hui项目 本项目是DLL项目,包括完整的界面库,使用双缓存,局部重画等技术,性能优异。为保证在不同的MFC版本中使用,本次上传提供了这部分的源码,一般不要对其改动。 二、HuiDemo1 简单的应用示例,包括窗口分割,控制面板和主显示区等,展示控件各方向停靠、自动充满、全屏切换、记忆窗口位置和大小、选项设置和保存注册表等功能,用户可直接以此为基础开发新项目。如需扩展其它功能,可从HuiDemo2查找复制相应代码。 三、HuiDemo2 除HuiDemo1的所有功能外,还包括界面库的全部功能和其它实用扩展功能,左中右三栏式分布,左右固定宽度,中间栏大小可变。 1、左边是属性栏,固定宽度,上边是时钟,下边是鼠标信息,当鼠标移到中间的图像区时显示鼠标位置和图像值。 2、中间是图像区,演示如何动态生存索引图像,从下向上移动,自适应大小,长宽比不变,点右边的调色板按钮改变颜色,点保存按钮把当前图像保存到桌面。 3、右边上边是控制栏,在中间的图像区中画各种几何图形,并计算几何图形包围的图像数据的最大值,最小值和平均值。 4、右边下边是表格演示,显示Windows文件夹下的文件列表,自动充满窗口区,随窗口大小改变显示项数,保证界面美观,最下面是搜索和定位功能。 四、运行环境,VC2010或更高版本。 欢迎大家下载并提意见,本资源版权归作者所有,分享供大家研究学心,不得用于商业用途,如有特殊要求请与本人联系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值