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
  • 相关阅读:
    RedisCacheTool参考其中的文件读写功能
    eclipse eayExplorer 查看代码的资源管理器打开方式
    有关写代码效率的问题
    Eclipse
    解决pdm打开只显示表名不显示字段的步骤
    绝对定位元素的水平垂直居中
    Maven依赖之Scope
    无提示关闭弹出窗口
    Maven模块与模块间的依赖
    Maven+Hibernate4注解0配置示例
  • 原文地址:https://www.cnblogs.com/McJeremy/p/1445510.html
Copyright © 2011-2022 走看看