简单的MFC应用程序

时间:2016-04-12 02:31:12

标签: c++ mfc

我目前正在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;

2 个答案:

答案 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的基础知识。