最近两天用MFC做了一个界面,用到了一些关于界面上控件的效果,记录一下,分享给大家。

第一:无边框的情况下,拖拽对话框界面

响应消息函数OnNcHitTest()方法,如下:

LRESULT CLogonUINew::OnNcHitTest(CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值

UINT nResult = CBaseDialog::OnNcHitTest(point);
    return nResult == HTCLIENT ? HTCAPTION : nResult;

return CBaseDialog::OnNcHitTest(point);
}

第二:MFC不支持编辑框灰色提示的属性,需要我们通过鼠标键盘的方式监听事件,做一些业务处理,重写PreTranslateMessage()方法,如下:

BOOL CLogonUINew::PreTranslateMessage(MSG* pMsg)
{
    // TODO: 在此添加专用代码和/或调用基类

if (pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_LBUTTONUP)
    {

if (pMsg->hwnd == ((CEdit*)GetDlgItem(IDC_EDIT_PIN))->m_hWnd &&
            GetFocus() == GetDlgItem(IDC_EDIT_PIN))
        {
            ((CEdit*)GetDlgItem(IDC_EDIT_PIN))->SetWindowText(_T(""));

((CEdit*)GetDlgItem(IDC_EDIT_PIN))->SetPasswordChar('*'); //NULL表示明文显示
        }
    }

}

第三:设置静态文本框的颜色,文字大小,和字体。响应消息函数OnCtlColor(),如下:

HBRUSH CLogonUINew::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CBaseDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO:  在此更改 DC 的任何特性

static CFont font;

font.CreatePointFont(85, _T("微软雅黑"));

((CStatic*)GetDlgItem(IDC_TIP))->SetFont(&font);

pDC->SetBkColor(RGB(255, 255, 255));

pDC->SetTextColor(RGB(153, 153, 153));

if (nCtlColor == CTLCOLOR_STATIC && pWnd->GetDlgCtrlID() == IDC_MSG_TIP) //更改静态文本
    {
        pDC->SetTextColor(RGB(237, 286, 32));
    }

HBRUSH b = CreateSolidBrush(RGB(255, 255, 255));
    return b;

// TODO:  如果默认的不是所需画笔,则返回另一个画笔
    return hbr;
}

第四:Button按钮的三种状态(QT很简单,设置qss样式就可以了),MFC的框架太复杂了,需要重绘(需要源码可以私信我)

如下:

m_btn_login.SetImages(_T("res/login_btn.bmp"), _T("res/login_btn_press.bmp"), _T("res/login_btn_hover.bmp")); //暂不支持从资源文件里读取。

(值得注意的是,在对话框创建之前一定要初始化一些画刷属性)如下:

//加载GDI绘图对象
    Gdiplus::GdiplusStartupInput gdiplusStartupInput;
    Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);

(头文件和库也需要引用)如下:

#include <gdiplus.h>
#include <afxdhtml.h>
using namespace Gdiplus;
#pragma comment(lib, "gdiplus.lib")

第五:MFC的windows升级版风格样式,需要在预处理头文件里新增,如下:

#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
#endif

MFC界面布局、效果相关推荐

  1. visual studio mfc 界面 布局调整

    11 资源视图 ---- 工具栏 22 资源视图 ---- 属性

  2. 浅谈Winform程序的界面布局设计

    DevExpress v20.2完整版下载 DevExpress Winforms Controls 内置140多个UI控件和库,完美构建流畅.美观且易于使用的应用程序.DevExpress WinF ...

  3. duilib 子窗口位置_Duilib学习笔记《02》— 界面布局

    2. 简单空白窗体界面 此处以创建一个简单的空白的灰色背景窗体为例.对应的XML布局文件对应的也就很简单.如下: 1<?xml version="1.0" encoding= ...

  4. duilib 子窗口位置_duilib入门简明教程 -- 界面布局(9)

    上一个教程实现的标题栏代码中,并没有看到处理自适应窗口大小的代码,但是窗口大小变化后,按钮的位置会跟着变化,这是因为我们将按钮放到了HorizontalLayout.VerticalLayout,这样 ...

  5. duilib教程之duilib入门简明教程9.界面布局

    上一个教程实现的标题栏代码中,并没有看到处理自适应窗口大小的代码,但是窗口大小变化后,按钮的位置会跟着变化,这是因为我们将按钮放到了HorizontalLayout.VerticalLayout,这样 ...

  6. duilib教程之duilib入门简明教程 -- 界面布局(9)

    上一个教程实现的标题栏代码中,并没有看到处理自适应窗口大小的代码,但是窗口大小变化后,按钮的位置会跟着变化,这是因为我们将按钮放到了HorizontalLayout.VerticalLayout,这样 ...

  7. 2013 duilib入门简明教程 -- 界面布局(9)

    上一个教程实现的标题栏代码中,并没有看到处理自适应窗口大小的代码,但是窗口大小变化后,按钮的位置会跟着变化,这是因为我们将按钮放到了HorizontalLayout.VerticalLayout,这样 ...

  8. 一步一步学Silverlight 2系列(3):界面布局

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  9. 使用Apache Tiles3.x构建界面布局(一)

    Tiles是一个免费的开源模板Java应用程序的框架.基于复合模式简化的用户界面的构建.对于复杂的网站仍是最简单.最优雅的方式与任何MVC技术一起工作.Struts2对Tiles提供了支持,如今Til ...

最新文章

  1. 在Ubuntu17.04中遇到无法清空回收站解决方法
  2. 如何配置html prettify,[HTML] Prettify 代码高亮使用总结
  3. [分享]Host文件的原理解释及应用说明
  4. HDU2896(病毒侵袭--AC自动机)
  5. oracle 各种日期函数格式和操作
  6. pku2777 Count Color
  7. 洛天依官方原版mmd模型_【MMD模型】天羽音官方MMD模型配布
  8. 逆向基础——软件手动脱壳技术入门
  9. rca接口_新手小白必读 1分钟看懂同轴和光纤音频接口
  10. 9 个出色的 JavaScript 库推荐【云图智联】
  11. Java新特性(一 · JDK1.5)
  12. [一直更新中]WerKeyTom的口胡
  13. 【教学类-07-04】20221113《破译电话号码-加减法版+自制(PDF打印)》(大班主题《我要上小学》)
  14. flask--虚拟环境
  15. oracle冷备修改数据文件位置,Oracle冷备迁移脚本(文件系统)
  16. 基于OpenStack Ironic与DPU的网易数帆裸金属方案实践
  17. Java中文生僻字排序
  18. 不务正业系列7:老照片去除斑点手法
  19. 【制作】基于金沙滩51单片机的电子密码锁程序
  20. 服务器被抓“肉鸡”后怎么办?怎么避免被抓“肉鸡“

热门文章

  1. 测试四则运算2:Right-BICEP
  2. MATLAB基于形态学的目标检测(一)简单图形统计
  3. mac清理软件哪个好用?五大Mac Cleaner介绍推荐
  4. 做鼻子测试软件,深度解析鼻子类型,测试你属于哪种鼻子?
  5. 资深工程师PCB经验介绍
  6. gis合并dem数据_arcgis如何制作DEM数据
  7. WPS怎么在线转换成Word,WPS转换成Word的操作步骤
  8. 【图解版】深入web请求过程
  9. 自定义函数 | R语言偏相关分析及绘图
  10. Django models常用Field介绍以及常见错误解决