MFC程序设计——标尺的例子

我们首先看一个例子:

头文件:

//Ruler.h

//CMyApp类代表应用程序本身,CMyApp::InitInstance通过构造CMainWindow对象创建一个主窗口;
//而CMainWindow的构造函数通过Create创建了在屏幕上显示的窗口;

class CMyApp : public CWinApp
{
public:
    virtual BOOL InitInstance ();
};

class CMainWindow : public CFrameWnd
{
public:
    CMainWindow ();
protected:
    //CMainWindow::OnPaint()处理所有的画图任务
    afx_msg void OnPaint ();
    DECLARE_MESSAGE_MAP ()
};

源文件:

//Ruler.cpp
#include <afxwin.h>
#include "Ruler.h"
CMyApp myApp;
///////////////////////////////////////////////////////////
// CMyApp member functions

BOOL CMyApp::InitInstance ()
{
    m_pMainWnd = new CMainWindow;
    m_pMainWnd->ShowWindow (m_nCmdShow);
    m_pMainWnd->UpdateWindow ();
    return TRUE;
}

///////////////////////////////////////////////////////////
// CMainWindow消息映射以及成员函数

BEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd)
    ON_WM_PAINT ()
END_MESSAGE_MAP ()

CMainWindow::CMainWindow ()
{
    Create (NULL, _T ("Ruler"));
}

void CMainWindow::OnPaint ()
{
    CPaintDC dc (this);      
    //初始化设备描述表

    //设置映射模式
    dc.SetMapMode (MM_LOENGLISH);
    //设置设备描述表的属性
    dc.SetTextAlign (TA_CENTER | TA_BOTTOM);   
    //设置背景模式,透明
    dc.SetBkMode (TRANSPARENT);

    // 画标尺的主体
    //黄色的画刷被选为设备描述表
    CBrush brush (RGB (255, 255, 0));
    CBrush* pOldBrush = dc.SelectObject (&brush);
    dc.Rectangle (100, -100, 1300, -200);
    dc.SelectObject (pOldBrush);
    //
    // 画散列的刻度线
    //
    for (int i=125; i<1300; i+=25) {
        dc.MoveTo (i, -192);
        dc.LineTo (i, -200);
    }

    for (int i=150; i<1300; i+=50) {
        dc.MoveTo (i, -184);
        dc.LineTo (i, -200);
    }

    for (int i=200; i<1300; i+=100) {
        dc.MoveTo (i, -175);
        dc.LineTo (i, -200);

        //CDC::TextOut画出数字标注
        CString string;
        string.Format (_T ("%d"), (i / 100) - 1);
        dc.TextOut (i, -175, string);
    }
}

注:C语言中的%d代表整型

标尺的应用程序没有采用把要传递给TextOut的字符串硬编码的方法,而是调用了CString::Format 生成标尺上的文本,CString是描述文本字符串的MFC类,对于CString对象而言,Format就能完成文本格式化,而不调用其它的外部函数。

猜你喜欢

转载自blog.csdn.net/godqiao/article/details/78544967