MFC是對Win32API的一個封裝.通過繼承體系大大友善了我們的使用,在建立一個MFC對話框程式的時候預設會生成兩個類
C___App
它是我們的應用程式類,繼承自 CWinApp 類,裡面的InitInstance就相當于WinMain,是一個入口函數.和 WinMain 一樣, 是被動調用的.
C___Dlg
它是我們的應用程式主視窗類,繼承自 CDialogEx 類
CDialogEx繼承自 CDialog 類
CDialog繼承自 CWnd 類
CWnd 是 MFC 中的視窗的基類.抽象了一些視窗的共性
在MFC中, 有很多 OnXXXX 的方法,他們都是被動調用的
比如, OnInitDialog, OnPaint等
它們表示在接收到XXXX消息的時候觸發
比如,
在 WM_PAINT 的時候, 會去執行 OnPaint 方法
在 WM_TIMER 的時候, 會去執行 OnTimer 方法
它們其實本質上都是回調函數
// 初始化ListCtrl的表頭
CRect rect = { };
m_list.GetWindowRect(&rect);
INT nListWidth = rect.right - rect.left;
m_list.InsertColumn(, L"品名", LVCFMT_CENTER, nListWidth / );
m_list.InsertColumn(, L"數量", LVCFMT_CENTER, nListWidth / );
m_list.InsertColumn(, L"廠商", LVCFMT_CENTER, nListWidth / );
m_list.InsertColumn(, L"價值", LVCFMT_CENTER, nListWidth / );
// 設定listCtrl的樣式
// 整行選中 + 網格線
DWORD dwListStyle = m_list.GetStyle();
dwListStyle |= LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES;
m_listInfo.SetExtendedStyle(dwListStyle);
// 需要注意的是先擷取在添加,否則原有的樣式會被覆寫
// 在listCtrl中響應滑鼠右鍵消息,彈出一個菜單
//NM_RCLICK這個是listCtrl中的滑鼠右鍵消息
void CInventorManageSystemDlg::OnNMRClickList(NMHDR* pNMHDR, LRESULT* pResult)
{
DWORD dwPos = GetMessagePos();
CPoint point(LOWORD(dwPos), HIWORD(dwPos));
CMenu Menu;
if (Menu.LoadMenuW(IDR_MENU1))
{
CMenu *pSumMenu = Menu.GetSubMenu();
if (pSumMenu)
pSumMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, point.x, point.y, this);
}
}
//裡面的菜單資源需要自己在資源視圖中添加
// 滑鼠左鍵的輕按兩下消息 NM_DBLCLK
void CInventorManageSystemDlg::OnNMDblclkList(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW *pNMListCtrl = (NM_LISTVIEW *)pNMHDR;
// 表示滑鼠輕按兩下了listCtrl中的某一行,在下面可以添加自己要處理的事件
if (pNMListCtrl->iItem == -)
return;
...
}
// 彈出一個子視窗
//模态對話框顯示
CXXXDlg dlg;
dlg.DoModel();
//在使用模态對話框是主視窗處于阻塞狀态.需要子視窗實作OnOK 或 OnCancel
//非模态對話框顯示
CXXXDlg* dlg = new CXXXDlg;
dlg.Create(IDD_DIALOG_XXX);
dlg.ShowWindow(SW_SHOW);