天天看點

我的第一個MFC程式

//hello.cpp

#include "afxwin.h"

#define IDB_BUTTON 100

//100以内的值為系統所用,是以此值要大于99

#define IDT_TIMER_LEN 200

#define IDM_SCROLLBAR 100

const int MAX_RANGE = 100;

const int MIN_RANGE = 0;

class CHelloApp:public CWinApp

{

public:

    virtual BOOL InitInstance();

};

CHelloApp HelloApp;

class CHelloWindow:public CFrameWnd

{

    CStatic *cs;

    CFont *font;

    CButton *button;

    CScrollBar *sb;

public:

    CHelloWindow();

    afx_msg void HandleButton();

    afx_msg void OnSize(UINT,int,int);

    afx_msg void OnTimer(UINT);

    afx_msg void OnHScroll(UINT nSBCode,UINT nPos,CScrollBar *pScrollBar);

    DECLARE_MESSAGE_MAP();

};

void CHelloWindow::HandleButton()

{

    MessageBeep(-1);

    //MessageBox("這是一個單文檔應用程式","消息框",MB_ICONEXCLAMATION|MB_OKCANCEL);

}

void CHelloWindow::OnSize(UINT nType,int cx,int cy)

{

    CRect r;

    GetClientRect(&r);

    r.InflateRect(-20,-20);

    button->MoveWindow(r);

}

void CHelloWindow::OnTimer(UINT id)

{

    //MessageBeep(-1);

}

void CHelloWindow::OnHScroll(UINT nSBCode,UINT nPos,CScrollBar *pScrollBar)

{

    //MessageBeep(-1);

    int pos;

    pos = sb->GetScrollPos();

    switch (nSBCode)

    {

    case SB_LINEUP:

        pos -= 1;

        break;

    case SB_LINEDOWN:

        pos += 1;

        break;

    case SB_PAGEUP:

        pos -= 10;

        break;

    case SB_PAGEDOWN:

        break;

        pos += 10;

    case SB_TOP:

        pos = MIN_RANGE;

        break;

    case SB_BOTTOM:

        pos = MAX_RANGE;

        break;

    case SB_THUMBPOSITION:

        pos = nPos;

        break;

    default:

        return;

    }

    if (pos<MIN_RANGE)

    {

        pos = MIN_RANGE;

    }

    else if (pos>MAX_RANGE)

    {

        pos = MAX_RANGE;

    }

    sb->SetScrollPos(pos,TRUE);

}

BEGIN_MESSAGE_MAP(CHelloWindow,CFrameWnd)

ON_BN_CLICKED(IDB_BUTTON,HandleButton)

ON_WM_SIZE()

ON_WM_TIMER()

ON_WM_HSCROLL()

END_MESSAGE_MAP()

BOOL CHelloApp::InitInstance()

{

    m_pMainWnd = new CHelloWindow();

    //int m_nCmdShow=SW_SHOWNORMAL;

    m_pMainWnd->ShowWindow(m_nCmdShow);

    m_pMainWnd->UpdateWindow();

    return true;

};

CHelloWindow::CHelloWindow()

{

    CRect r;

    Create(NULL,"CStatic Test",WS_OVERLAPPEDWINDOW,CRect(0,0,800,600));

    SetTimer(IDT_TIMER_LEN,1000,NULL);

    GetClientRect(&r);

    //r.InflateRect(-20,-20);

    cs = new CStatic();

    cs->Create("Now is the time for all good men to come to the aid of their country",

        WS_CHILD|WS_VISIBLE|WS_BORDER|SS_LEFT,CRect(10,20,150,150),this);

    sb = new CScrollBar();

    sb->Create(WS_CHILD|WS_VISIBLE|SBS_HORZ,CRect(10,10,r.Width()-10,30),this,IDM_SCROLLBAR);

    sb->SetScrollRange(MIN_RANGE,MAX_RANGE,TRUE);

    font = new CFont;

    //36pixel

    //700字型的密度(400是normal的,700是黑bold,值範圍是1到1000)

    //Arial,Courier New,Symbol,Times New Roman,Wingdings

    font->CreateFont(18,0,0,0,700,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,

        CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,"arial");

    cs->SetFont(font);

    r.InflateRect(-40,-80);

    button = new CButton();

    button->Create("Push me",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,

        r,this,IDB_BUTTON);//CRect(50,60,30,20)

}