在mfc的油漆背景

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在mfc的油漆背景相关的知识,希望对你有一定的参考价值。

我正在尝试使用MFC库在c ++中绘制窗口的背景。我要求使用此框架,因为我正在使用MFC应用程序。我尝试了几种不同的方法但无法使其工作。所以我最近打开了一个空白项目,只是想弄清楚如何绘制背景,但它不起作用。任何帮助都会很棒。这是我的代码......

class CExerciseApp : public CWinApp
{   
     //a pointer to our window class object
     Basic_Window *bwnd; 

     BOOL InitInstance()
     {  
         bwnd = new Basic_Window();
         m_pMainWnd = bwnd;
         bwnd->ShowWindow(1);

         HWND hWnd = GetActiveWindow();

         CRect drawing_area;
         GetClientRect(hWnd, &drawing_area);

         CBrush newBrush;
         newBrush.CreateSolidBrush(RGB(255,255,255));

         CDC* dc = bwnd->GetDC();
         dc->FillRect(&drawing_area, &newBrush);
         bwnd->RedrawWindow();
         return TRUE;
    }    
};  
答案

从我自己的帖子https://stackoverflow.com/a/22875542/383779,我可以保证我做了那个工作。我使用该方法在商业应用程序上实现主题/皮肤。

您需要向Basic_Window类添加OnCtlColor方法。在.h文件中,添加到Basic_Window类:

const CBrush m_BackgroundBrush;

afx_msg HBRUSH OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor);

在.cpp文件中,构造函数将初始化新变量

Basic_Window::Basic_Window()
: m_BackgroundBrush(RGB(255,255,255))
{
//...
}

并实施

HBRUSH Basic_Window::OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    if(some_exception)
        return __super::OnCtlColor( pDC, pWnd, nCtlColor);

    return (HBRUSH) m_BackgroundBrush.GetSafeHandle();
}

some_exception这里意味着你需要默认行为,而不是你自己的绘画。也许它是某种类型的控制,并且存在nCtlColor参数。

不要忘记将ON_WM_CTLCOLOR()添加到您的消息地图中。

以上是关于在mfc的油漆背景的主要内容,如果未能解决你的问题,请参考以下文章

图像比其他油漆组件晚半秒绘制

我可以像这样画一个简单的油漆饼图吗?

在mfc中绘制背景

想用MFC做个界面,但不知道如何在MFC对话框中插入背景图片,把这图片用于登录界面的背景

MFC 背景图像问题

更改 SysLink 控件的背景颜色 - MFC