我目前正在C ++课程中学习MFC和GUI基础知识,我试图创建一个非常简单的MFC程序,它具有绿色背景并且只有文本&#34 ; Hello World"在窗口中间。不幸的是,对于我来说,创建一个带有标题的普通窗口,这对我来说变得很困难。
我的问题是,我从哪里开始更改背景颜色并向窗口添加文本。我应该把它放在我的代码中?
这就是我所拥有的:
#include <afxwin.h>
class CMainFrame : public CFrameWnd
{
public:
CMainFrame()
{
Create(NULL, _T("Windows App"));
}
};
class CApp : public CWinApp
{
CMainFrame *Frame;
BOOL InitInstance()
{
Frame = new CMainFrame();
m_pMainWnd = Frame;
Frame->ShowWindow(SW_SHOW);
Frame->UpdateWindow();
return TRUE;
}
};
CApp theApp;
答案 0 :(得分:2)
通常使用visual studio app向导开始实现MFC应用程序。它为您创建初始应用程序框架。这可以基于简单的对话框或MFC文档 - 视图架构。然后,例如,设置背景颜色。在视图类的OnDraw()成员函数中。
CMainframe通常是包含文档窗口及其视图的主应用程序窗口。
所有这一切,你想继续构建这个例子,你可以实现OnPaint消息处理程序:https://msdn.microsoft.com/en-us/library/01c9aaty.aspx并在那里绘制。
为此,您还需要在窗口https://msdn.microsoft.com/en-us/library/0x0cx6b1.aspx中实现消息映射,然后添加ON_WM_PAINT()处理程序。应用程序向导还会为您添加消息映射和处理程序。
答案 1 :(得分:0)
要更改背景颜色并在窗口中设置文本,首先必须处理WM_PAINT消息处理程序。如果您使用的是Visual Studio IDE,则可以通过在类向导中为CMainFrame类选择消息处理程序WM_PAINT来完成,否则您可以直接在实现文件中编写处理程序代码。以下是您的应用的代码:
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_PAINT()
ON_WM_SIZE()
END_MESSAGE_MAP()
void CMainFrame::OnPaint()
{
CString strText = _T("Hello World"); //Display String
TEXTMETRIC textMetricObj; //Structure to get height and width of char
CPaintDC dc(this);
CRect clientRect;
CBrush brush;
dc.GetTextMetrics(&textMetricObj); //Get char height and width info
int nCharHeight = textMetricObj.tmHeight;
int nStrWidth = strText.GetLength() * textMetricObj.tmMaxCharWidth; // get max string width
brush.CreateSolidBrush(RGB(0,255,0)); //create green brush to paint background color to green
GetClientRect(&clientRect); // get active client area of window
dc.FillRect(clientRect,&brush); //fill client area with green color
//find display string bounding rectangle as middle of client window area
int top = int((clientRect.Height() - nCharHeight) / 2);
int bottom = int((clientRect.Height() + nCharHeight) / 2);
int left = int((clientRect.Width() - nStrWidth) / 2);
int right = int((clientRect.Width() + nStrWidth) / 2);
dc.DrawText(strText,CRect(left,top,right,bottom),DT_CENTER); //draw text in specified rectangle
}
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);
Invalidate();
}
我建议您阅读David Kruglinski编写的Microsoft Visual C ++编程,以了解MFC的基础知识。