MFC教材筆記整理_part03_基礎控制項_ComboBox下拉選單
layout好後
將combobox設置為DropDown List的類型
初始化ComboBox下拉選單資料可跳至CPP檔案中的OnInitDialog事件中
雙擊ComboBox添加事件綁定
完整Header程式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | // MFCApplication3Dlg.h: 標頭檔 // #pragma once // CMFCApplication3Dlg 對話方塊 class CMFCApplication3Dlg : public CDialogEx { // 建構 public: CMFCApplication3Dlg(CWnd* pParent = nullptr); // 標準建構函式 // 對話方塊資料 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_MFCAPPLICATION3_DIALOG }; #endif 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() public: CComboBox m_combobox; afx_msg void OnCbnSelchangeCombo1(); }; |
完整CPP程式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 | // MFCApplication3Dlg.cpp: 實作檔案 // #include "pch.h" #include "framework.h" #include "MFCApplication3.h" #include "MFCApplication3Dlg.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 對 App About 使用 CAboutDlg 對話方塊 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 對話方塊資料 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_ABOUTBOX }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支援 // 程式碼實作 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CMFCApplication3Dlg 對話方塊 CMFCApplication3Dlg::CMFCApplication3Dlg(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_MFCAPPLICATION3_DIALOG, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CMFCApplication3Dlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_COMBO1, m_combobox); } BEGIN_MESSAGE_MAP(CMFCApplication3Dlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_CBN_SELCHANGE(IDC_COMBO1, &CMFCApplication3Dlg::OnCbnSelchangeCombo1) END_MESSAGE_MAP() // CMFCApplication3Dlg 訊息處理常式 BOOL CMFCApplication3Dlg::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_combobox.AddString(_T("台北")); m_combobox.AddString(_T("台中")); m_combobox.AddString(_T("桃園")); m_combobox.AddString(_T("新竹")); m_combobox.SetCurSel(0); int nSel = m_combobox.GetCurSel();//獲取當前選中的索引 CString strSel; m_combobox.GetLBText(nSel,strSel);//獲取對應索引的字串值 SetDlgItemText(IDC_EDIT1,strSel); return TRUE; // 傳回 TRUE,除非您對控制項設定焦點 } void CMFCApplication3Dlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果將最小化按鈕加入您的對話方塊,您需要下列的程式碼, // 以便繪製圖示。對於使用文件/檢視模式的 MFC 應用程式, // 框架會自動完成此作業。 void CMFCApplication3Dlg::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 CMFCApplication3Dlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CMFCApplication3Dlg::OnCbnSelchangeCombo1() { // TODO: 在此加入控制項告知處理常式程式碼 int nSel = m_combobox.GetCurSel(); //獲取當前選中的索引 CString strSel; m_combobox.GetLBText(nSel, strSel);//獲取對應索引的字串值 SetDlgItemText(IDC_EDIT1, strSel); } |
留言
張貼留言