最近两天用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