1、控件随着窗口自适应
首先在类视图里面添加OnSize()函数,然后添加一个ChangeSize()函数,头文件中添加如下

//控件自适应变量POINT old;CRect m_rect;void ChangeSize(UINT nID, int x, int y);afx_msg void OnSize(UINT nType, int cx, int cy);

在OnInitDialog中

//控件自适应GetClientRect(&m_rect);old.x = m_rect.right - m_rect.left;old.y = m_rect.bottom - m_rect.top;
//窗口自适应
void CTestDlg::ChangeSize(UINT nID, int x, int y)
{CWnd *pWnd;pWnd = GetDlgItem(nID);if (pWnd != NULL){CRect rect;pWnd->GetWindowRect(&rec);ScreenToClient(&rec);rect.left = rect.left*x / m_rect.Width();rect.top = rect.top*y / m_rect.Height();rect.bottom = rect.bottom*y / m_rect.Height();rect.right = rect.right*x / m_rect.Width();pWnd->MoveWindow(rec); //伸缩控件}
}//窗口自适应
int count = 0;
void CTestDlg::OnSize(UINT nType, int cx, int cy)
{CDialog::OnSize(nType, cx, cy);// TODO:  在此处添加消息处理程序代码if (nType != SIZE_MINIMIZED){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);  //列出所有控件    while (hwndChild){woc = ::GetDlgCtrlID(hwndChild);//取得ID  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]);Rect.SetRect(TLPoint, BRPoint);GetDlgItem(woc)->MoveWindow(Rect, TRUE);hwndChild = ::GetWindow(hwndChild, GW_HWNDNEXT);}old = Newp;}//主对话框需要,子对话框不需要if (count!= 0) //用于计数,因为第一次运行的时候,不应该执行以下程序,否则会报错{CRect rectTab;m_tab.GetClientRect(&rectTab); //m_tab是tab控件的变量rectTab.top += 20;rectTab.bottom += 4;rectTab.left += 4;rectTab.right -= 4;a.MoveWindow(&rectTab, TRUE);//tab子界面ab.MoveWindow(&rectTab, TRUE);//tab子界面b}count++;
}

想要使tab控件里面的子对话框跟随对话框自适应,主对话框(即有tab控件的对话框)中的程序是以上程序,而子对话框内的程序只需要去除以上tab那一段程序即可
注意:需要修改对话框中所有Static的ID,修改成不一样的ID即可。

2、给对话框添加背景图片
(1)资源视图右键->添加->资源->Bitmap->导入,将bmp图片放置在工程文件的Res文件夹中,将其导入Bitmap,然后修改其ID为IDB_BITMAP_BACKGROUND

(2)在类视图中添加OnPaint()函数

//添加背景颜色
void CTestDlg::OnPaint()
{if (IsIconic()){CPaintDC dc(this); // device context for painting  SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icondc.DrawIcon(x, y, m_hIcon);}else{CRect rect;CPaintDC dc(this);GetClientRect(&rect);dc.FillSolidRect(rect, RGB(141, 182, 205));dc.FillPath();//背景图片 能够自适应窗口GetClientRect(&rect);CDC dcMem;dcMem.CreateCompatibleDC(&dc);CBitmap bmpBackground;bmpBackground.LoadBitmap(IDB_BITMAP_BACKGROUND);   //IDB_BITMAP_BACKGROUND是你自己的图对应的ID BITMAP bitmap;bmpBackground.GetBitmap(&bitmap);CBitmap *pbmpOld = dcMem.SelectObject(&bmpBackground);dc.StretchBlt(0, 0, rect.Width(), rect.Height(), &dcMem, 0, 0, bitmap.bmWidth, bitmap.bmHeight, SRCCOPY);//CDialog::OnPaint();}
}

我的背景图片已经包括了那个蓝框框

如果想要自己画蓝色框框,只需要在OnPaint()函数中添加以下程序即可

    ScreenToClient(&rect);//转换为对话框上的客户坐标CBrush brush(RGB(161, 224, 247));//中间的蓝色框CRect rect(200, 200, 600, 380); //指定区域大小dc.FillRect(&rect, &brush);

3、使Static背景变化
由于为了自适应改变了Static的ID,所以这里需要对不同的Static进行设置

//设置控件颜色
HBRUSH UserInfoDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);// TODO:  在此更改 DC 的任何特性if ((pWnd->GetDlgCtrlID() == IDC_IDTYPE_STATIC) || (pWnd->GetDlgCtrlID() == IDC_NAME_STATIC)|| (pWnd->GetDlgCtrlID() == IDC_SEX_STATIC) || (pWnd->GetDlgCtrlID() == IDC_BIRTH_STATIC)|| (pWnd->GetDlgCtrlID() == IDC_NATION_STATIC) || (pWnd->GetDlgCtrlID() == IDC_ADDRESS_STATIC)|| (pWnd->GetDlgCtrlID() == IDC_AGENCY_STATIC) || (pWnd->GetDlgCtrlID() == IDC_STARTDATE_STATIC)|| (pWnd->GetDlgCtrlID() == IDC_ENDDATE_STATIC) || (pWnd->GetDlgCtrlID() == IDC_IDNUM_STATIC))//{pDC->SetTextColor(RGB(0, 0, 0));//设置文本色    pDC->SetBkColor(RGB(141, 182, 205));//设置背景色  pDC->SetBkMode(TRANSPARENT);//透明return (HBRUSH)::GetStockObject(NULL_BRUSH);}// TODO:  如果默认的不是所需画笔,则返回另一个画笔return hbr;
}

添加背景和使静态框也变成背景色后的界面

MFC—界面设计(控件自适应,添加背景图,Static背景颜色设置)相关推荐

  1. 探究MFC之Dialog窗口最大化时控件自适应

    探究MFC之Dialog窗口最大化时控件自适应 MFC的Dialog程序,在窗口最大化时,如何所有让子窗口(控件)按比例放大? 启动VisualC++6.0,New->MFC AppWizard ...

  2. Visual Studio开发MFC项目OCX控件添加使用控件方法

    1.在Windows系统中注册OCX控件 在OCX控件目录,右键新建一个文本文档,将文件名和扩展名改为"双击注册.bat",添加如下注册脚本: cd /d %~dp0 RegSvr ...

  3. 基于PyQt5实现界面控件自适应大小

    基于PyQt5实现界面控件自适应大小 界面控件自适应大小,点击窗口放大后,界面控件大小随之发生变化. 实现效果 实例1 点击窗口放大后: 实例2

  4. 使用MFC开发ActiveX控件

    摘要: 本文对COM组件中的ActiveX控件的MFC开发方法进行了介绍,讲述了用户自定义和库存属性.方法以及事件的添加方法和属性页的制作过程.使读者能够掌握基本的MFC ActiveX开发方法. 前 ...

  5. KFC宅急送点餐系统开发 MFC动态树形控件使用

    本文写于该系统开发完成后的第二年,那时候博主大2,有一门名为<程序设计方法学>的课程,老师上课很幽默风趣,也经常给我们带来一些时事新闻.当然,课余也会给我们布置一些作业.其中"K ...

  6. MFC ActiveX (ocx)控件的开发

    前言 ActiveX是Microsoft对于一系列策略性面向对象程序技术和工具的称呼,其中主要的技术是组件对象模型(COM). ActiveX控件是一种实现了一系列特定接口而使其在使用和外观上更象一个 ...

  7. MFC自绘控件学习总结

    前言:从这学期开始就一直在学习自绘控件(mfc),目标是做出一款播放器界面,主要是为了打好基础,因为我基础实在是很烂....说说我自己心得体会以及自绘控件的方法吧,算是吐槽吧,说的不对和不全的地方,或 ...

  8. MFC自绘控件学习总结(1)

    前言:从这学期开始就一直在学习自绘控件(mfc),目标是做出一款播放器界面,主要是为了打好基础,因为我基础实在是很烂....说说我自己心得体会以及自绘控件的方法吧,算是吐槽吧,说的不对和不全的地方,或 ...

  9. MFC基础,MFC自绘控件学习总结.---转

    前言:从这学期开始就一直在学习自绘控件(mfc),目标是做出一款播放器界面,主要是为了打好基础,因为我基础实在是很烂....说说我自己心得体会以及自绘控件的方法吧,算是吐槽吧,说的不对和不全的地方,或 ...

最新文章

  1. 区块链之智能合约详解
  2. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲网上区域赛模拟赛 题解(除了C、G之后补)
  3. mysql的in查询参数限制,多少数据量会造成性能下降?什么时候创建临时表合适?
  4. 从容稳进,高通正扎实推进5G
  5. c++运行不出结果_fastjson 不出网利用总结
  6. 操作系统之进程管理:4、线程与多线程
  7. 关于在阅读nnUNet代码中的一些小细节的记录(三)
  8. Android 如何在Eclipse中查看Android API源码 及 support包源码
  9. QGroundControl源码编译安装
  10. C++#ifndef/#define/#endif的用法
  11. 软件项目管理和实施方案
  12. 绘图杂记【1】Python、R等绘图
  13. 如何设置Mosek的最大迭代次数?
  14. 系统讲解一下整站SEO优化都涉及到哪些工作?
  15. 个人所得税java程序怎么编写_个人所得税Java实现代码
  16. 剑指 Offer II 009. 乘积小于 K 的子数组
  17. httpc服务器错误类型大全
  18. jQuery动画基础讲解(教你玩转jQuery动画)
  19. BZOJ4735 你的生命已如风中残烛(组合数学)
  20. 非磺化花菁和磺化花菁有机染料Cyanine dyes的说明应用

热门文章

  1. 怎么解c语言逆向编码,逆向还原C语言代码 练习1
  2. 打开21端口 linux,Linux开启FTP的21端口
  3. 二层交换机、三层交换机及四层交换机的区别
  4. 【邢不行|量化小讲堂系列06-Python量化入门】极简方法将日线数据转为周线、月线或其他周期
  5. python进阶之web前端(01—HTML超文本标记语言)
  6. html如何实现统计访客功能,JS 实时网站访客(用户)统计
  7. 口碑营销:如何让传统行业的电商引发口碑效应并营销
  8. vps、云服务器、虚拟主机
  9. 使用Matlab读取二进制数据文件
  10. 传统报修方式和智能报修系统的区别