zoukankan      html  css  js  c++  java
  • C++ MFC学习 (四)

    对话框

    创建MFC应用程序时,选择对话框

    可使用向导创建对应的对话框的类

      1 // MFC_Demo2Dlg.cpp : 实现文件
      2 //
      3 
      4 #include "stdafx.h"
      5 #include "MFC_Demo2.h"
      6 #include "MFC_Demo2Dlg.h"
      7 #include "afxdialogex.h"
      8 #include "DlgExec.h"
      9 #include "DlgShow.h"
     10 
     11 #ifdef _DEBUG
     12 #define new DEBUG_NEW
     13 #endif
     14 
     15 
     16 // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
     17 
     18 class CAboutDlg : public CDialogEx
     19 {
     20 public:
     21     CAboutDlg();
     22 
     23 // 对话框数据
     24 #ifdef AFX_DESIGN_TIME
     25     enum { IDD = IDD_ABOUTBOX };
     26 #endif
     27 
     28     protected:
     29     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
     30 
     31 // 实现
     32 protected:
     33     DECLARE_MESSAGE_MAP()
     34 };
     35 
     36 CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
     37 {
     38 }
     39 
     40 void CAboutDlg::DoDataExchange(CDataExchange* pDX)
     41 {
     42     CDialogEx::DoDataExchange(pDX);
     43 }
     44 
     45 BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
     46 END_MESSAGE_MAP()
     47 
     48 
     49 // CMFC_Demo2Dlg 对话框
     50 
     51 
     52 
     53 CMFC_Demo2Dlg::CMFC_Demo2Dlg(CWnd* pParent /*=NULL*/)
     54     : CDialogEx(IDD_MFC_DEMO2_DIALOG, pParent)
     55 {
     56     m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
     57 }
     58 
     59 void CMFC_Demo2Dlg::DoDataExchange(CDataExchange* pDX)
     60 {
     61     CDialogEx::DoDataExchange(pDX);
     62 }
     63 
     64 BEGIN_MESSAGE_MAP(CMFC_Demo2Dlg, CDialogEx)
     65     ON_WM_SYSCOMMAND()
     66     ON_WM_PAINT()
     67     ON_WM_QUERYDRAGICON()
     68     ON_BN_CLICKED(IDC_BUTTON1, &CMFC_Demo2Dlg::OnBnClickedButton1)
     69     ON_BN_CLICKED(IDC_BUTTON2, &CMFC_Demo2Dlg::OnBnClickedButton2)
     70 END_MESSAGE_MAP()
     71 
     72 
     73 // CMFC_Demo2Dlg 消息处理程序
     74 
     75 BOOL CMFC_Demo2Dlg::OnInitDialog()
     76 {
     77     CDialogEx::OnInitDialog();
     78 
     79     // 将“关于...”菜单项添加到系统菜单中。
     80 
     81     // IDM_ABOUTBOX 必须在系统命令范围内。
     82     ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
     83     ASSERT(IDM_ABOUTBOX < 0xF000);
     84 
     85     CMenu* pSysMenu = GetSystemMenu(FALSE);
     86     if (pSysMenu != NULL)
     87     {
     88         BOOL bNameValid;
     89         CString strAboutMenu;
     90         bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
     91         ASSERT(bNameValid);
     92         if (!strAboutMenu.IsEmpty())
     93         {
     94             pSysMenu->AppendMenu(MF_SEPARATOR);
     95             pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
     96         }
     97     }
     98 
     99     // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
    100     //  执行此操作
    101     SetIcon(m_hIcon, TRUE);            // 设置大图标
    102     SetIcon(m_hIcon, FALSE);        // 设置小图标
    103 
    104     // TODO: 在此添加额外的初始化代码
    105     dlg.Create(IDD_SHOW);
    106     return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    107 }
    108 
    109 void CMFC_Demo2Dlg::OnSysCommand(UINT nID, LPARAM lParam)
    110 {
    111     if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    112     {
    113         CAboutDlg dlgAbout;
    114         dlgAbout.DoModal();
    115     }
    116     else
    117     {
    118         CDialogEx::OnSysCommand(nID, lParam);
    119     }
    120 }
    121 
    122 // 如果向对话框添加最小化按钮,则需要下面的代码
    123 //  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
    124 //  这将由框架自动完成。
    125 
    126 void CMFC_Demo2Dlg::OnPaint()
    127 {
    128     if (IsIconic())
    129     {
    130         CPaintDC dc(this); // 用于绘制的设备上下文
    131 
    132         SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    133 
    134         // 使图标在工作区矩形中居中
    135         int cxIcon = GetSystemMetrics(SM_CXICON);
    136         int cyIcon = GetSystemMetrics(SM_CYICON);
    137         CRect rect;
    138         GetClientRect(&rect);
    139         int x = (rect.Width() - cxIcon + 1) / 2;
    140         int y = (rect.Height() - cyIcon + 1) / 2;
    141 
    142         // 绘制图标
    143         dc.DrawIcon(x, y, m_hIcon);
    144     }
    145     else
    146     {
    147         CDialogEx::OnPaint();
    148     }
    149 }
    150 
    151 //当用户拖动最小化窗口时系统调用此函数取得光标
    152 //显示。
    153 HCURSOR CMFC_Demo2Dlg::OnQueryDragIcon()
    154 {
    155     return static_cast<HCURSOR>(m_hIcon);
    156 }
    157 
    158 /*
    159 模态与非模态  模态就是只能操作当前对话框,非模态反之
    160 */
    161 
    162 //模态对话框的点击事件
    163 void CMFC_Demo2Dlg::OnBnClickedButton1()
    164 {
    165     // TODO: 在此添加控件通知处理程序代码
    166 
    167     //弹出对话框  阻塞
    168     CDlgExec dlg;
    169     dlg.DoModal();
    170 }
    171 
    172 //非模态对话框的点击事件
    173 void CMFC_Demo2Dlg::OnBnClickedButton2()
    174 {
    175     // TODO: 在此添加控件通知处理程序代码
    176 
    177     //弹出非模态对话框
    178     //CDlgShow dlg;
    179 
    180     //1.创建
    181     //dlg.Create(IDD_SHOW);  //创建窗口只能创建一次,多次就会崩掉 建议创建放在初始化函数中
    182     //2.显示
    183     dlg.ShowWindow(SW_SHOWNORMAL);
    184 }

    按钮消息,可通过设计界面双击,自动会产生单击消息,也可在属性中添加

    在使用其他控件时,需要给其它控件绑定相应的变量,控件变量的类别为Control

    static_text 添加变量时,会出现  以static为结尾的ID是不可以添加变量,需要修改ID

     1 //用static_text显示图片,需要使用到bitmap图片
     2     //① 设置静态控件窗口风格为位图居中显示
     3     m_pic.ModifyStyle(0xf,SS_BITMAP|SS_CENTERIMAGE);
     4     //② 通过路径获取bitmap句柄
     5 #define HBMP(filepath,width,height) (HBITMAP)LoadImage(AfxGetInstanceHandle(),filepath,IMAGE_BITMAP,width,height,LR_LOADFROMFILE|LR_CREATEDIBSECTION)
     6     //宽高设置 应该按照 控件的大小去设置
     7     CRect rect;
     8     m_pic.GetWindowRect(rect);
     9 
    10     //③ 静态控件设置bitmap
    11     m_pic.SetBitmap(HBMP(TEXT("./1.bmp"), rect.Width, rect.Height));

    EnableWindow()可设置按钮的点击状态

  • 相关阅读:
    Java8新特性
    为什么要使用ORM技术?和 JDBC 有何不一样?
    HTTP Status 500
    重装Oracle时出现SID已存在问题的解决办法
    数据库模式显示的Swing表格
    自然连接和等值连接
    雷林鹏分享:Java 循环结构
    雷林鹏分享:Java 运算符
    雷林鹏分享:Java 修饰符
    雷林鹏分享:Java 变量类型
  • 原文地址:https://www.cnblogs.com/lg804721251/p/14316849.html
Copyright © 2011-2022 走看看