MFC界面布局、效果

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

Guess you like

Origin blog.csdn.net/struborn_b/article/details/105867410