zoukankan      html  css  js  c++  java
  • (七)对话框,单选框(radiobox),复选框(checkbox),列表框(ListBox),组合框(CComboBox),水平滚动条(Horizontal scroll bar),微调(旋转)spincontrol,列表视图控件CListCtrl,静态控件static

    1,模态对话框和非模态对话框

    // 模态对话框
    void CMainFrame::OnDialogExec()
    {
        // TODO: 在此添加命令处理程序代码
    
        // 创建对话框对象
        CDialog dlg(IDD_DIALOG1); // 阻塞
    
        // 运行
        dlg.DoModal();
    }
    
    // 非模态对话框
    void CMainFrame::OnDialogShow()
    {
        // TODO: 在此添加命令处理程序代码
    
        dlg2.ShowWindow(SW_SHOWNORMAL);
    }

    非模态对话框在OnCreate()中 create

    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
        if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
            return -1;
    
        if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
            !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
        {
            TRACE0("未能创建工具栏
    ");
            return -1;      // 未能创建
        }
    
        if (!m_wndStatusBar.Create(this))
        {
            TRACE0("未能创建状态栏
    ");
            return -1;      // 未能创建
        }
        m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));
    
        // TODO: 如果不需要可停靠工具栏,则删除这三行
        m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
        EnableDocking(CBRS_ALIGN_ANY);
        DockControlBar(&m_wndToolBar);
    
        dlg2.Create(IDD_DIALOG2);
        return 0;
    }

    设为成员变量

    private:
        CDialog dlg2;

    自定义对话框

    创建完成之后自动生成如下内容

    添加处理函数

    基于对话框的编程

    添加MFC 类

    类似于Qt 的提升为

    为自定义控件添加鼠标移动事件处理函数,当鼠标移动到Button 上时按钮会逃跑

    // MyButton 消息处理程序
    
    void MyButton::OnMouseMove(UINT nFlags, CPoint point)
    {
        // TODO: 在此添加消息处理程序代码和/或调用默认值
    
        int x = rand() % 400;
        int y = rand() % 400;
    
        this->MoveWindow(x, y, 100, 50);
    
        CButton::OnMouseMove(nFlags, point);
    }
    // MyButton
    
    class MyButton : public CButton
    {
        DECLARE_DYNAMIC(MyButton)
    
    public:
        MyButton();
        virtual ~MyButton();
    
    protected:
        DECLARE_MESSAGE_MAP()
    public:
        afx_msg void OnMouseMove(UINT nFlags, CPoint point);
    };

    给Button 设置位图

    // CpartsDlg 消息处理程序
    
    BOOL CpartsDlg::OnInitDialog()
    {
        CDialogEx::OnInitDialog();
    
        // 将“关于...”菜单项添加到系统菜单中。
    
        // IDM_ABOUTBOX 必须在系统命令范围内。
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
        ASSERT(IDM_ABOUTBOX < 0xF000);
    
        CMenu* pSysMenu = GetSystemMenu(FALSE);
        if (pSysMenu != nullptr)
        {
            BOOL bNameValid;
            CString strAboutMenu;
            bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
            ASSERT(bNameValid);
            if (!strAboutMenu.IsEmpty())
            {
                pSysMenu->AppendMenu(MF_SEPARATOR);
                pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
            }
        }
    
        // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
        //  执行此操作
        SetIcon(m_hIcon, TRUE);            // 设置大图标
        SetIcon(m_hIcon, FALSE);        // 设置小图标
    
        // TODO: 在此添加额外的初始化代码
        m_button.SetWindowTextW(TEXT("逃跑的按钮"));
    
        CBitmap bitmap;
        bitmap.LoadBitmapW(IDB_BITMAP1);
    
        // 获取位图大小
        BITMAP bmp;
        bitmap.GetBitmap(&bmp);
    
        // 给按钮设置位图
        m_button.SetBitmap(bitmap);
        // 图片有多大,按钮就设置多大
        m_button.MoveWindow(20, 20, bmp.bmWidth, bmp.bmHeight);
    
        return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }

    关联变量

    void CpartsDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialogEx::DoDataExchange(pDX);
        DDX_Control(pDX, IDC_BUTTON2, m_button);
        DDX_Text(pDX, IDC_EDIT1, m_str);
    }
    // CpartsDlg 消息处理程序
    
    BOOL CpartsDlg::OnInitDialog()
    {
        CDialogEx::OnInitDialog();
    
        // 将“关于...”菜单项添加到系统菜单中。
    
        // IDM_ABOUTBOX 必须在系统命令范围内。
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
        ASSERT(IDM_ABOUTBOX < 0xF000);
    
        CMenu* pSysMenu = GetSystemMenu(FALSE);
        if (pSysMenu != nullptr)
        {
            BOOL bNameValid;
            CString strAboutMenu;
            bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
            ASSERT(bNameValid);
            if (!strAboutMenu.IsEmpty())
            {
                pSysMenu->AppendMenu(MF_SEPARATOR);
                pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
            }
        }
    
        // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
        //  执行此操作
        SetIcon(m_hIcon, TRUE);            // 设置大图标
        SetIcon(m_hIcon, FALSE);        // 设置小图标
    
        // TODO: 在此添加额外的初始化代码
        m_button.SetWindowTextW(TEXT("逃跑的按钮"));
    
        CBitmap bitmap;
        bitmap.LoadBitmapW(IDB_BITMAP1);
    
        // 获取位图大小
        BITMAP bmp;
        bitmap.GetBitmap(&bmp);
    
        // 给按钮设置位图
        m_button.SetBitmap(bitmap);
        // 图片有多大,按钮就设置多大
        m_button.MoveWindow(20, 20, bmp.bmWidth, bmp.bmHeight);
    
        m_str = TEXT("123456");
        // 把 m_str 内容更新到对应的编辑区
        UpdateData(FALSE);
    
        return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }
    void CpartsDlg::OnBnClickedButton3()
    {
        // TODO: 在此添加控件通知处理程序代码
    
        // 把编辑区的内容更新到m_str
        UpdateData(TRUE);
        MessageBox(m_str);
    }

    Edit 控件

    单选框,复选框

    单选框

    CheckRadioButton(IDC_RADIO1, IDC_RADIO3, IDC_RADIO1);
    void CCheckBoxDlg::OnBnClickedButton1()
    {
        // TODO: 在此添加控件通知处理程序代码
    
        CString str;
        if (IsDlgButtonChecked(IDC_RADIO1)) {
            str = TEXT("");
        }
        if (IsDlgButtonChecked(IDC_RADIO3)) {
            str = TEXT("");
        }
        MessageBox(str);
    }

    复选框

        m_check1.SetWindowTextW(TEXT("测试"));
    
        m_check1.SetCheck(1);

    void CCheckBoxDlg::OnBnClickedButton2()
    {
        // TODO: 在此添加控件通知处理程序代码
        CString str;
        if (IsDlgButtonChecked(IDC_CHECK1)) {
            str += TEXT("第一个
    ");
        }
        if (IsDlgButtonChecked(IDC_CHECK2)) {
            str += TEXT("第二个
    ");
        }
        if (IsDlgButtonChecked(IDC_CHECK3)) {
            str += TEXT("第三个
    ");
        }
        if (IsDlgButtonChecked(IDC_CHECK4)) {
            str += TEXT("第四个
    ");
        }
        MessageBox(str);
    }

    列表框ListBox

    // 添加
    void CListBoxDlg::OnBnClickedButton1()
    {
        // TODO: 在此添加控件通知处理程序代码
    
        // 获取编辑区内容
        UpdateData(TRUE);
        if (m_str.GetLength() == 0) {
            MessageBox(TEXT("内容不能为空"));
            return;
        }
        // 给列表框添加内容
        m_listBox.AddString(m_str);
    
        m_str.Empty();
        // 把内容更新到编辑区
        UpdateData(FALSE);
    
    }
    
    // 删除
    void CListBoxDlg::OnBnClickedButton2()
    {
        // TODO: 在此添加控件通知处理程序代码
    
        // 获取当前选中的行
        int i = m_listBox.GetCurSel();
    
        // 删除
        m_listBox.DeleteString(i);
    }
    
    
    // 点击选中的内容触发
    void CListBoxDlg::OnLbnSelchangeList1()
    {
        // TODO: 在此添加控件通知处理程序代码
    
        // 获取选中内容
        int i = m_listBox.GetCurSel(); 
        m_listBox.GetText(i, m_str);
    
        // 更新到编辑区
        UpdateData(FALSE);
    }
    
    
    
    
    void CListBoxDlg::OnBnClickedButton3()
    {
        // TODO: 在此添加控件通知处理程序代码
    
        UpdateData(TRUE);
        if (m_str.GetLength() == 0) {
            MessageBox(TEXT("内容不能为空"));
            return;
        }
    
        int i = m_listBox.GetCurSel();
        m_listBox.DeleteString(i);
    
        //m_listBox.AddString(m_str);
        m_listBox.InsertString(i, m_str);
        
        m_str.Empty();
        UpdateData(FALSE);
    
    }

    组合框(CComboBox)

    基于对话框

    运行:

    添加类变量

    选择在组合框的列表框中的字符串。
    int SetCurSel(
       int nSelect 
    );

    在初始化函数中对组合框进行初始化操作,其中对条目的操作与listbox 的函数是一致的

    // CCComboBoxDlg 消息处理程序
    
    BOOL CCComboBoxDlg::OnInitDialog()
    {
        CDialogEx::OnInitDialog();
    
        // 将“关于...”菜单项添加到系统菜单中。
    
        // IDM_ABOUTBOX 必须在系统命令范围内。
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
        ASSERT(IDM_ABOUTBOX < 0xF000);
    
        CMenu* pSysMenu = GetSystemMenu(FALSE);
        if (pSysMenu != NULL)
        {
            BOOL bNameValid;
            CString strAboutMenu;
            bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
            ASSERT(bNameValid);
            if (!strAboutMenu.IsEmpty())
            {
                pSysMenu->AppendMenu(MF_SEPARATOR);
                pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
            }
        }
    
        // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
        //  执行此操作
        SetIcon(m_hIcon, TRUE);            // 设置大图标
        SetIcon(m_hIcon, FALSE);        // 设置小图标
    
        // TODO: 在此添加额外的初始化代码
    
        m_comboBox.SetCurSel(2); //设置默认显示
    
        CString str;
        m_comboBox.GetLBText(0,str); // 获取第0行的内容
        //MessageBox(str);
    
        // 添加内容
        m_comboBox.AddString(TEXT("KOBE"));
        //m_comboBox.InsertString();
        //m_comboBox.DeleteString();
        //m_comboBox.GetCurSel();
        return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }

    水平滚动条(Horizontal scroll bar)

    添加关联变量

    添加事件控件,去父类属性中寻找 消息 WM_HSCROLL

    Edit Control 添加关联变量

    void CCComboBoxDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialogEx::DoDataExchange(pDX);
        DDX_Control(pDX, IDC_COMBO1, m_comboBox);
        DDX_Control(pDX, IDC_SCROLLBAR1, m_scroll);
        DDX_Text(pDX, IDC_EDIT1, m_pos);
    }
    BEGIN_MESSAGE_MAP(CCComboBoxDlg, CDialogEx)
        ON_WM_SYSCOMMAND()
        ON_WM_PAINT()
        ON_WM_QUERYDRAGICON()
        ON_WM_HSCROLL()
    END_MESSAGE_MAP()

    初始化:

        m_pos = 50;
        // 更新到编辑区
        UpdateData(FALSE);
        // 设置滑块范围
        m_scroll.SetScrollRange(1,100);
    
        m_scroll.SetScrollPos(m_pos);
    // 滑块事件处理,只有操作滑块,nPos才有值
    void CCComboBoxDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
    {
        // TODO: 在此添加消息处理程序代码和/或调用默认值
    
        // 如果有多个滑块,以此加以区分
        if (pScrollBar == &m_scroll) {
            switch (nSBCode) { // 判断滑动条的哪一部分
            case SB_THUMBPOSITION: // 滑块位置
                {
                    m_scroll.SetScrollPos(nPos); // 设置滑块的位置
                    m_pos = nPos;
                    UpdateData(FALSE); // 更新到编辑区
                    break;
                }
            case SB_LINELEFT: // 向左的箭头
                {
                    int tempPos;
                    tempPos = m_scroll.GetScrollPos() - 1;
                    if (tempPos <= 0) {
                        tempPos = 1;
                    }
                    m_scroll.SetScrollPos(tempPos);
                    m_pos = tempPos;
                    UpdateData(FALSE);
                    break;
                }
            case SB_LINERIGHT: // 向右的箭头
                {
                    int tempPos;
                    tempPos = m_scroll.GetScrollPos() + 1;
                   if (tempPos >= 100) {
                        tempPos = 100;
                    }
                    m_scroll.SetScrollPos(tempPos);
                    m_pos = tempPos;
                    UpdateData(FALSE);
                    break;
                }
            case SB_PAGELEFT: // 箭头和滑块之间的左边
                {
                    int tempPos;
                    tempPos = m_scroll.GetScrollPos() - 5;
                   if (tempPos <= 0) {
                        tempPos = 1;
                    }
                    m_scroll.SetScrollPos(tempPos);
                    m_pos = tempPos;
                    UpdateData(FALSE);
                    break;
                }
            case SB_PAGERIGHT: // 箭头和滑块之间的右边
                {
                    int tempPos;
                    tempPos = m_scroll.GetScrollPos() + 5;
                   if (tempPos >= 100) {
                        tempPos = 100;
                    }
                    m_scroll.SetScrollPos(tempPos);
                    m_pos = tempPos;
                    UpdateData(FALSE);
                    break;
                }
            }
        
        }
    
        CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
    }

    微调(旋转)spincontrol

    然后设置它们的TAB键顺序,顺序必须是edit为1,spin为2. 

    设置好顺序之后就是关联它们,右键单击spin属性,设置Set Buddy Integer为TRUE,Auto Buddy也设置为TRUE

    或绑定spin和edit:

    m_Spin.SetBuddy(GetDlgItem(m_Edit1)); 

    接着去初始化对话框函数中设置spin的范围和进制数 

    双击控件添加消息

        // 初始化CSpinButtonCtrl
        m_spin.SetRange(0,10); // //表示数值只能在0到10内变化
        m_spin.SetBase(10); //设置进制数,只能是10进制和16进制

    如果Auto Buddy 为false,可以在消息处理函数中处理

    void CCComboBoxDlg::OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult)
    {
        LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
        // TODO: 在此添加控件通知处理程序代码
        UpdateData(TRUE);
    
        if(pNMUpDown->iDelta == -1) // 如果此值为-1 , 说明点击了Spin的往下的箭头
        {
            m_editNum -= 2;
            if (m_editNum <= 0) {
                m_editNum = 0;
            }
        }
        else if(pNMUpDown->iDelta == 1) // 如果此值为1, 说明点击了Spin的往上的箭头
        {
            m_editNum += 2;
            if (m_editNum >= 10) {
                m_editNum = 10;
            }
        }
        UpdateData(FALSE);
    
        *pResult = 0;
    }

    列表视图控件CListCtrl

    List Control

    属性设置 view-> Report (报表方式)

    添加关联变量 m_list

    // CListControlDlg 消息处理程序
    
    BOOL CListControlDlg::OnInitDialog()
    {
        CDialogEx::OnInitDialog();
    
        // 将“关于...”菜单项添加到系统菜单中。
    
        // IDM_ABOUTBOX 必须在系统命令范围内。
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
        ASSERT(IDM_ABOUTBOX < 0xF000);
    
        CMenu* pSysMenu = GetSystemMenu(FALSE);
        if (pSysMenu != NULL)
        {
            BOOL bNameValid;
            CString strAboutMenu;
            bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
            ASSERT(bNameValid);
            if (!strAboutMenu.IsEmpty())
            {
                pSysMenu->AppendMenu(MF_SEPARATOR);
                pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
            }
        }
    
        // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
        //  执行此操作
        SetIcon(m_hIcon, TRUE);            // 设置大图标
        SetIcon(m_hIcon, FALSE);        // 设置小图标
    
        // TODO: 在此添加额外的初始化代码
    
        // 设置风格样式
        // LVS_EX_GRIDLINES 网格
        // LVS_EX_FULLROWSELECT 选中整行
        m_list.SetExtendedStyle(m_list.GetExtendedStyle()
            | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
    
        // 插入标题
        CString head[] = {TEXT("姓名"),TEXT("年龄"),TEXT("性别")};
        // 插入列
        m_list.InsertColumn(0,head[0],LVCFMT_LEFT,80);
        m_list.InsertColumn(1,head[1],LVCFMT_LEFT,50);
        m_list.InsertColumn(2,head[2],LVCFMT_LEFT,50);
    
        for (int i = 0; i < 10; i++) {
            CString str;
            str.Format(TEXT("mike%d"),i + 1);
            
            // 确定行
            m_list.InsertItem(i,str);
            // 确定列
            m_list.SetItemText(i,1,TEXT("18"));
            m_list.SetItemText(i,2,TEXT(""));
        }
    
        return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }

    静态控件static

    一、静态控件Static的使用
        1、获取对话框的控件,适用于所有控件,需要转换为所需类型
        CStatic * pImage = (CStatic *)GetDlgItem(IDC_STATIC);
        IDC_STATIC:控件ID
        
        2、设置静态控件窗口风格为位图居中显示
        pImage->ModifyStyle(0xf, SS_BITMAP | SS_CENTERIMAGE);
        
        3获取控件的大小,适用于所有控件: CWnd::GetWindowRect
        
        4、静态控件设置bitmap:  CStatic::SetBitmap
        
        5、通过路径获取bitmap句柄
        #define HBMP(filepath,width,height) (HBITMAP)LoadImage(AfxGetInstanceHandle(),filepath,IMAGE_BITMAP,width,height,LR_LOADFROMFILE|LR_CREATEDIBSECTION)
        
        例如:HBMP(TEXT("./image/1.bmp"), 100, 100)
        
    二、 CButton使用
        1、设置按钮内容 CWnd::SetWindowText
    
        2、按钮是否变灰 CWnd::EnableWindow
        
    三、定时器
        1、设置定时器 CWnd::SetTimer
        2、关闭定时器 CWnd::KillTimer
    // 图片浏览器Dlg.h : 头文件
    //
    
    #pragma once
    #include "afxwin.h"
    
    
    // C图片浏览器Dlg 对话框
    class C图片浏览器Dlg : public CDialogEx
    {
    // 构造
    public:
        C图片浏览器Dlg(CWnd* pParent = NULL);    // 标准构造函数
    
    // 对话框数据
        enum { IDD = IDD_MY_DIALOG };
    
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
    
    
    // 实现
    protected:
        HICON m_hIcon;
    
        // 生成的消息映射函数
        virtual BOOL OnInitDialog();
        afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
        afx_msg void OnPaint();
        afx_msg HCURSOR OnQueryDragIcon();
        DECLARE_MESSAGE_MAP()
    private:
        CButton buttonPre;    //上一张按钮
        CButton buttonAuto;    //自动按钮
        CButton buttonNext;    //下一张按钮
        CStatic *pImage;    //静态控件
        CRect rect;
        bool isAuto;    //自动按钮按下标志位
        int i;    //标志第几张图片
    
    public:
        afx_msg void OnBnClickedButtonPre();
        afx_msg void OnBnClickedButtonNext();
        afx_msg void OnBnClickedButtonAuto();
        afx_msg void OnTimer(UINT_PTR nIDEvent);
    };
    // 图片浏览器Dlg.cpp : 实现文件
    //
    
    #include "stdafx.h"
    #include "图片浏览器.h"
    #include "图片浏览器Dlg.h"
    #include "afxdialogex.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    
    // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
    
    class CAboutDlg : public CDialogEx
    {
    public:
        CAboutDlg();
    
    // 对话框数据
        enum { IDD = IDD_ABOUTBOX };
    
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
    
    // 实现
    protected:
        DECLARE_MESSAGE_MAP()
    };
    
    CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
    {
    }
    
    void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialogEx::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
    END_MESSAGE_MAP()
    
    
    // C图片浏览器Dlg 对话框
    
    
    
    C图片浏览器Dlg::C图片浏览器Dlg(CWnd* pParent /*=NULL*/)
        : CDialogEx(C图片浏览器Dlg::IDD, pParent)
        , i(0)
        , isAuto(true)
    {
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    
        
    }
    
    void C图片浏览器Dlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialogEx::DoDataExchange(pDX);
        DDX_Control(pDX, IDC_BUTTON_PRE, buttonPre);
        DDX_Control(pDX, IDC_BUTTON_Auto, buttonAuto);
        DDX_Control(pDX, IDC_BUTTON_NEXT, buttonNext);
    
        
    }
    
    BEGIN_MESSAGE_MAP(C图片浏览器Dlg, CDialogEx)
        ON_WM_SYSCOMMAND()
        ON_WM_PAINT()
        ON_WM_QUERYDRAGICON()
        ON_BN_CLICKED(IDC_BUTTON_PRE, &C图片浏览器Dlg::OnBnClickedButtonPre)
        ON_BN_CLICKED(IDC_BUTTON_NEXT, &C图片浏览器Dlg::OnBnClickedButtonNext)
        ON_BN_CLICKED(IDC_BUTTON_Auto, &C图片浏览器Dlg::OnBnClickedButtonAuto)
        ON_WM_TIMER()
    END_MESSAGE_MAP()
    
    
    // C图片浏览器Dlg 消息处理程序
    
    BOOL C图片浏览器Dlg::OnInitDialog()
    {
        CDialogEx::OnInitDialog();
    
        // 将“关于...”菜单项添加到系统菜单中。
    
        // IDM_ABOUTBOX 必须在系统命令范围内。
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
        ASSERT(IDM_ABOUTBOX < 0xF000);
    
        CMenu* pSysMenu = GetSystemMenu(FALSE);
        if (pSysMenu != NULL)
        {
            BOOL bNameValid;
            CString strAboutMenu;
            bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
            ASSERT(bNameValid);
            if (!strAboutMenu.IsEmpty())
            {
                pSysMenu->AppendMenu(MF_SEPARATOR);
                pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
            }
        }
    
        // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
        //  执行此操作
        SetIcon(m_hIcon, TRUE);            // 设置大图标
        SetIcon(m_hIcon, FALSE);        // 设置小图标
    
        // TODO:  在此添加额外的初始化代码
    
    //通过路径获取Bitmap句柄
    #define HBMP(filepath,width,height) (HBITMAP)LoadImage(AfxGetInstanceHandle(),filepath,IMAGE_BITMAP,width,height,LR_LOADFROMFILE|LR_CREATEDIBSECTION)
    
        //获取对话框上静态控件的句柄
        pImage = (CStatic*)GetDlgItem(IDC_STATIC);
    
        //设置静态控件窗口风格为位图居中显示
        pImage->ModifyStyle(0xf, SS_BITMAP | SS_CENTERIMAGE);
    
        pImage->GetWindowRect(&rect); //获取静态控件范围
        i = 0;
    
        //静态控件设置图片
        pImage->SetBitmap(HBMP(TEXT("./image/1.bmp"), rect.Width(), rect.Height()));
    
        return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }
    
    void C图片浏览器Dlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
        if ((nID & 0xFFF0) == IDM_ABOUTBOX)
        {
            CAboutDlg dlgAbout;
            dlgAbout.DoModal();
        }
        else
        {
            CDialogEx::OnSysCommand(nID, lParam);
        }
    }
    
    // 如果向对话框添加最小化按钮,则需要下面的代码
    //  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
    //  这将由框架自动完成。
    
    void C图片浏览器Dlg::OnPaint()
    {
        if (IsIconic())
        {
            CPaintDC dc(this); // 用于绘制的设备上下文
    
            SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
            // 使图标在工作区矩形中居中
            int cxIcon = GetSystemMetrics(SM_CXICON);
            int cyIcon = GetSystemMetrics(SM_CYICON);
            CRect rect;
            GetClientRect(&rect);
            int x = (rect.Width() - cxIcon + 1) / 2;
            int y = (rect.Height() - cyIcon + 1) / 2;
    
            // 绘制图标
            dc.DrawIcon(x, y, m_hIcon);
        }
        else
        {
            CDialogEx::OnPaint();
        }
    }
    
    //当用户拖动最小化窗口时系统调用此函数取得光标
    //显示。
    HCURSOR C图片浏览器Dlg::OnQueryDragIcon()
    {
        return static_cast<HCURSOR>(m_hIcon);
    }
    
    
    //上一张按钮
    void C图片浏览器Dlg::OnBnClickedButtonPre()
    {
        i--;
    
        if (i < 1)
        {
            i = 24;
        }
    
        CString filePath;
        filePath.Format(TEXT("./image/%d.bmp"), i);
    
        pImage->SetBitmap(HBMP(filePath, rect.Width(), rect.Height()));
    }
    
    //下一张按钮
    void C图片浏览器Dlg::OnBnClickedButtonNext()
    {
        // TODO:  在此添加控件通知处理程序代码
    
        i++;
    
        if (i > 24)
        {
            i = 1;
        }
    
        CString filePath;
        filePath.Format(TEXT("./image/%d.bmp"), i);
    
        pImage->SetBitmap(HBMP(filePath, rect.Width(), rect.Height()));
    }
    
    
    //自动按钮
    void C图片浏览器Dlg::OnBnClickedButtonAuto()
    {
        // TODO:  在此添加控件通知处理程序代码
        if (isAuto == true) //按下自动按钮
        {
            SetWindowText(TEXT("停止"));
            buttonNext.EnableWindow(FALSE);
            buttonPre.EnableWindow(FALSE);
    
            SetTimer(1, 1000, NULL); //设置定时器
            
        }
        else //按下停止按钮
        {
            SetWindowText(TEXT("自动"));
            buttonNext.EnableWindow(TRUE);
            buttonPre.EnableWindow(TRUE);
    
            KillTimer(1);    //关闭定时器
        }
    
        isAuto = !isAuto; //标志位切换
        
    }
    
    //定时器处理函数
    void C图片浏览器Dlg::OnTimer(UINT_PTR nIDEvent)
    {
        // TODO:  在此添加消息处理程序代码和/或调用默认值
    
        if (1 == nIDEvent)
        {
            OnBnClickedButtonNext();    //直接调用下一张按钮处理函数
        }
    
    
        CDialogEx::OnTimer(nIDEvent);
    }

    加登陆对话框

    重写  OnOK()

     

    void LoginDlg::OnOK()
    {
        // TODO: 在此添加专用代码和/或调用基类
    
        //CDialogEx::OnOK();
    }
    // LoginDlg.cpp : 实现文件
    //
    
    #include "stdafx.h"
    #include "static.h"
    #include "LoginDlg.h"
    #include "afxdialogex.h"
    
    
    // LoginDlg 对话框
    
    IMPLEMENT_DYNAMIC(LoginDlg, CDialogEx)
    
    LoginDlg::LoginDlg(CWnd* pParent /*=NULL*/)
        : CDialogEx(LoginDlg::IDD, pParent)
        , m_account(_T(""))
        , m_pwd(_T(""))
    {
    
    }
    
    LoginDlg::~LoginDlg()
    {
    }
    
    void LoginDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialogEx::DoDataExchange(pDX);
        DDX_Text(pDX, IDC_EDIT1, m_account);
        DDX_Text(pDX, IDC_EDIT2, m_pwd);
    }
    
    
    BEGIN_MESSAGE_MAP(LoginDlg, CDialogEx)
        ON_BN_CLICKED(IDC_BUTTON1, &LoginDlg::OnBnClickedButton1)
        ON_BN_CLICKED(IDC_BUTTON2, &LoginDlg::OnBnClickedButton2)
        ON_WM_CLOSE()
    END_MESSAGE_MAP()
    
    
    // LoginDlg 消息处理程序
    
    // 确认
    void LoginDlg::OnBnClickedButton1()
    {
        // TODO: 在此添加控件通知处理程序代码
            //取出编辑区内容
        UpdateData(TRUE);
    
    
        if (m_account == TEXT("mike") && m_pwd == TEXT("250250"))
        {
    
            //关闭对话框
            CDialogEx::OnOK();
        }
        else
        {
            MessageBox(TEXT("账号或密码不正确"));
        }
    }
    
    
    void LoginDlg::OnBnClickedButton2()
    {
        // TODO: 在此添加控件通知处理程序代码
        exit(1);
    }
    
    
    void LoginDlg::OnOK()
    {
        // TODO: 在此添加专用代码和/或调用基类
    
        //CDialogEx::OnOK();
    }
    
    
    void LoginDlg::OnClose()
    {
        // TODO: 在此添加消息处理程序代码和/或调用默认值
        exit(1);
        CDialogEx::OnClose();
    }
    loginDlg.cpp
    #pragma once
    
    
    // LoginDlg 对话框
    
    class LoginDlg : public CDialogEx
    {
        DECLARE_DYNAMIC(LoginDlg)
    
    public:
        LoginDlg(CWnd* pParent = NULL);   // 标准构造函数
        virtual ~LoginDlg();
    
    // 对话框数据
        enum { IDD = IDD_DIALOG1 };
    
    protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
    
        DECLARE_MESSAGE_MAP()
    public:
        afx_msg void OnBnClickedButton1();
    private:
        CString m_account;
        CString m_pwd;
    public:
        afx_msg void OnBnClickedButton2();
        virtual void OnOK();
        afx_msg void OnClose();
    };
    loginDlg.h

  • 相关阅读:
    Bean的装配
    什么是脏读,不可重复读,幻读
    MySQL 中的数据类型介绍
    spring事务
    js:防抖动与节流
    React 之容器组件和展示组件相分离解密
    Java 里如何实现线程间通信
    线程之间的通信
    NIO之Buffer的clear()、rewind()、flip()方法的区别
    清空git缓存
  • 原文地址:https://www.cnblogs.com/xiangtingshen/p/10807144.html
Copyright © 2011-2022 走看看