我正在尝试使用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;
}
};
答案 0 :(得分:1)
从我自己的帖子https://stackoverflow.com/a/22875542/383779,我可以保证我已经完成了这项工作。我使用这种方法在商业应用程序上实现主题/皮肤。
您需要在Basic_Window类中添加OnCtlColor方法。 在.h文件中,添加到Basic_Window类:
IFile#getContents()
和
const CBrush m_BackgroundBrush;
在.cpp文件中,构造函数将初始化新变量
afx_msg HBRUSH OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor);
并实施
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
。