zoukankan      html  css  js  c++  java
  • 我的第一个MFC HelloWord程序

    学习了一段时间的标准C++基础。
    发现自己真的白白浪费了大学几年的大好时光。
    -----
    记录一下自己的第一段MFC HelloWord程序。
    真的用心学起来,发现无论是C++还是MFC也并不难,为什么大学几年都没有兴趣来摸一下?后悔中。

     1/*
     2  MFC 中创建窗口程序的过程:
     3  1:创建一个继承自CWinApp的应用程序类,并创建该类的全局实例。
     4  2:创建继承自WFrameWnd的窗口类
     5  3: 在窗口类中声明消息处理过程及声明消息映射
     6  4:  定义应用程序类,在其入口函数中指定应用程序主窗口。
     7  5: 定义窗口类,在其构造函数中创建窗口自身,并创建相关的控件。
     8  6: 在消息映射中加入需要处理的事件
     9  6: 实现窗口类的消息处理函数
    10
    11  而通过WINDOWS API创建的过程为:
    12   设计一个窗口类;
    13   注册窗口类;
    14   创建窗口;
    15   显示及更新窗口。
    16*/

    17#include <afxwin.h>
    18#define IDB_BUTTON 101  //定义BUTTON的ID
    19//应用程序
    20class CHelloApp:public CWinApp
    21{
    22public:
    23    virtual BOOL InitInstance();
    24}
    ;
    25
    26//将调用CHelloApp的缺省构造函数,而该函数会调用InitInstance函数
    27//InitInstance 是一个应用程序开始执行时要调用的可重载函数。
    28//相当于WinMain
    29CHelloApp helloApp;
    30
    31class CHelloWnd:public CFrameWnd
    32{
    33    CStatic* cs;
    34    CButton* btn;
    35public:
    36    CHelloWnd();
    37    //消息处理函数
    38    //使用afx_msg明确标识为一个消息处理函数
    39    //消息处理函数返回值为空,且不能有参数
    40    //这是不同于WndProc的
    41    afx_msg void HandleButtonClicked();
    42    //消息映射
    43    DECLARE_MESSAGE_MAP() //注意是没有分号的
    44}
    ;
    45
    46//消息映射
    47BEGIN_MESSAGE_MAP(CHelloWnd,CFrameWnd)
    48ON_BN_CLICKED(IDB_BUTTON,HandleButtonClicked)
    49END_MESSAGE_MAP()
    50//指定应用程序主窗口,也就是注册一个窗口类
    51BOOL CHelloApp::InitInstance()
    52{
    53    //m_pMainWnd是一个CWnd*类型变量 ,指向当前应用程序的主窗口对象实例。
    54    this->m_pMainWnd=new CHelloWnd();
    55    this->m_pMainWnd->ShowWindow(this->m_nCmdShow);
    56    this->m_pMainWnd->UpdateWindow();
    57    return true;
    58}

    59void CHelloWnd::HandleButtonClicked()
    60{
    61    int a=MessageBox(TEXT("你点击了BTN"),TEXT("警告"),4);
    62    //cs->MoveWindow(50,20,100,100,true);
    63}

    64CHelloWnd::CHelloWnd()
    65{
    66    //六个基本的控件:
    67    //CStatic CButton CEdit CScrollBar CComboBox CList
    68
    69    //CRect(0,0,200,200)
    70    //是一个临时的对象,因此,它必须传递给常量引用
    71    //而在Create的原型中,可以看到RECT参数定义:const RECT& rect = rectDefault,
    72    //归根结底,原因是,生成的临时对象变量是const的    
    73    Create(NULL,L"Hello World",WS_OVERLAPPEDWINDOW,CRect(10,10,200,200));
    74    cs=new CStatic();
    75    cs->Create(L"我的第一个MFC",WS_CHILD|WS_VISIBLE|WS_BORDER|SS_RIGHT,CRect(50,50,150,150),this);
    76
    77    btn=new CButton();
    78    btn->Create(TEXT("点击我"),WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect(50,100,150,150),this,IDB_BUTTON);
    79}

    80
  • 相关阅读:
    Overloaded的方法是否可以改变返回值的类型
    parseXXX的用法
    java的类型转换问题。int a = 123456;short b = (short)a;System.out.println(b);为什么结果是-7616?
    UVA 10405 Longest Common Subsequence(简单DP)
    POJ 1001 Exponentiation(大数处理)
    POJ 2318 TOYS(计算几何)(二分)
    POJ 1265 Area (计算几何)(Pick定理)
    POJ 3371 Flesch Reading Ease (模拟题)
    POJ 3687 Labeling Balls(拓扑序列)
    POJ 1094 Sorting It All Out(拓扑序列)
  • 原文地址:https://www.cnblogs.com/McJeremy/p/1445510.html
Copyright © 2011-2022 走看看