【发布时间】:2015-03-04 16:31:31
【问题描述】:
我正在尝试使用 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;
}
};
【问题讨论】:
-
见 WM_ERASEBKGND msdn.microsoft.com/en-us/library/windows/desktop/…
-
我应该在调用 FillRect 之前发布 WM_ERASEBKGND 消息吗?
-
你不发
WM_ERASEBKGND,系统会在适当的时候发。您应该覆盖CWnd::OnEraseBkgnd 并在那里进行背景绘画。这就是它的全部内容。 -
什么是 Basic_Window?那不是 MFC 窗口。您需要将所有像 FillRect() 这样的绘制代码放入 Basic_Window 的绘制过程中,而不仅仅是在只调用一次的 InitInstance 中绘制它。它不起作用,因为一旦另一个窗口(您的或其他应用程序的)覆盖它然后又打开它,您的绘画就不会再次出现,因此消失了。
-
但是如果在InitInstance中进行了绘画操作,应该