🌸 MFC進度條控件 | Progress Control
1。新建MFC項目(基于對話框、靜態庫)
2。添加控件,刪除初始的3個多余控件
加1個progress control,修改其marquee為true,添加變量:變量名為test_progress。
加2個按鈕,修改caption為START,STOP。雙擊按鈕添加程序(或者右鍵START按鈕,添加事件處理程序)
按鈕控件可以接收的消息類型包括:
? BN_CLICKED 當用戶點擊按鈕時發送的消息,單擊。
? BN_DUBLECLICKED 當用戶點擊按鈕時發送的消息,雙擊。
? BN_KILLFOCUS 按鈕失去了輸入焦點。
? BN_SETFOCUS 鈕獲得輸入焦點。
? BCN_DROPDOWN
? BCN_HOTITEMCHANGE 高亮條目被改變。當鼠標進入或離開此按鈕空間區域時發生該事件消息。
? NM_GETCUSTOMSFLITRECT
? NM_CUSTOMDRAW
? NM_THEMECHANCED 主題被改變。
3。添加代碼
雙擊按鈕1(按鈕1 start,2 stop),添加代碼:
void CMFCApplication1Dlg::OnBnClickedButton1()
{// TODO: 在此添加控件通知處理程序代碼test_progress.ShowWindow(true);/*進度條的可見性true*///test_progress.ModifyStyle(NULL, WS_VISIBLE);
}
同理添加按鈕2的代碼
void CMFCApplication1Dlg::OnBnClickedButton2()
{// TODO: 在此添加控件通知處理程序代碼test_progress.ShowWindow(false);/*進度條的可見性false*///test_progress.ShowWindow(true);/*進度條可見*/test_progress.ModifyStyle(WS_VISIBLE, NULL);
}
進度條的代碼
BOOL CMFCApplication9Dlg::OnInitDialog()
{CDialogEx::OnInitDialog();// 將“關于...”菜單項添加到系統菜單中。/*...*/// TODO: 在此添加額外的初始化代碼test_progress.SetMarquee(true, 1000);//設置進度條的速度,數值越大移動越慢return TRUE; // 除非將焦點設置到控件,否則返回 TRUE
}
4。運行
運行結果:
🌸 MFC選擇框控件 | Check Box
其他同上,加一個check box控件,修改caption為顯示進度條
雙擊check box,添加代碼
void CMFCApplication2Dlg::OnBnClickedCheck1()
{// TODO: 在此添加控件通知處理程序代碼BOOL bChecked = ((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck(); //把復選框選中狀態傳遞給bCheckedif (bChecked) //復選框被選中test_progress.ModifyStyle(NULL, WS_VISIBLE);//進度條可見else //復選框未被選中test_progress.ModifyStyle(WS_VISIBLE, NULL);//進度條不可見Invalidate(); //重繪窗口
}
🌸 MFC滑動塊控件 | Slider Control
1。新建MFC項目(基于對話框、靜態庫)
2。添加控件,刪除初始的3個多余控件
加1個static text
加1個滑動塊slider control,添加變量test_slider
3。雙擊滑塊添加代碼
void CMFCApplication7Dlg::OnNMCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult)
{LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);// TODO: 在此添加控件通知處理程序代碼int pos = test_slider.GetPos();//獲取當前的位置CString cstr;cstr.Format(_T("%d"), pos);//轉換為字符串SetDlgItemText(IDC_STATIC, cstr);//設置靜態文本框顯示的內容*pResult = 0;
}
// CMFCApplication7Dlg 消息處理程序BOOL CMFCApplication7Dlg::OnInitDialog()
{CDialogEx::OnInitDialog();// 將“關于...”菜單項添加到系統菜單中。/*....*/// TODO: 在此添加額外的初始化代碼test_slider.SetRange(0, 10);/*滑動塊的范圍*/test_slider.SetPos(5);//設置當前的位置test_slider.SetLineSize(1);//設置使用上下左右鍵來控制滑塊,并設置滑動單位為1test_slider.SetPageSize(2);//設置使用pageup和pagedown鍵來控制滑塊,并設置滑動單位為2return TRUE; // 除非將焦點設置到控件,否則返回 TRUE
}
4。運行
運行結果:
? MFC滑動塊控件 | 調色 eg
1。新建MFC項目(基于對話框、靜態庫)
2。添加控件,刪除初始的3個多余控件
加4個edit control,添加變量test_Rvalue、test_Gvalue、test_Bvalue、test_color
加3個滑動塊slider control,添加變量test_R、test_G、test_B
3。OnInitDialog()添加代碼
// TODO: 在此添加額外的初始化代碼test_R.SetRange(0, 255);test_G.SetRange(0, 255);test_B.SetRange(0, 255);test_color = RGB(0, 0, 0);
雙擊滑塊1添加代碼
void CMFCApplication10Dlg::OnNMCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult)
{LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);// TODO: 在此添加控件通知處理程序代碼UpdateData(TRUE);test_Rvalue = test_R.GetPos();CString cstr;cstr.Format(_T("%d"), test_Rvalue);//轉換為字符串SetDlgItemText(IDC_EDIT1, cstr);//設置靜態文本框顯示的內容COLORREF test_color1 = RGB(test_R.GetPos(), test_G.GetPos(), test_B.GetPos());CString colorstr;colorstr.Format(_T("%d"), test_color1);//轉換為字符串SetDlgItemText(IDC_EDIT4, colorstr);//設置靜態文本框顯示的內容*pResult = 0;
}
2、3同理
void CMFCApplication9Dlg::OnNMCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult)
{LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);// TODO: 在此添加控件通知處理程序代碼//UpdateData(TRUE);test_Rvalue = test_R.GetPos();CString cstr;cstr.Format(_T("%d"), test_Rvalue);//轉換為字符串SetDlgItemText(IDC_EDIT1, cstr);//設置靜態文本框顯示的內容COLORREF test_color1 = RGB(test_R.GetPos(), test_G.GetPos(), test_B.GetPos());CString colorstr;colorstr.Format(_T("%d"), test_color1);//轉換為字符串SetDlgItemText(IDC_EDIT4, colorstr);//設置靜態文本框顯示的內容*pResult = 0;
}void CMFCApplication9Dlg::OnNMCustomdrawSlider2(NMHDR *pNMHDR, LRESULT *pResult)
{LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);// TODO: 在此添加控件通知處理程序代碼//UpdateData(TRUE);test_Gvalue = test_G.GetPos();CString cstr;cstr.Format(_T("%d"), test_Gvalue);//轉換為字符串SetDlgItemText(IDC_EDIT2, cstr);//設置靜態文本框顯示的內容COLORREF test_color1 = RGB(test_R.GetPos(), test_G.GetPos(), test_B.GetPos());CString colorstr;colorstr.Format(_T("%d"), test_color1);//轉換為字符串SetDlgItemText(IDC_EDIT4, colorstr);//設置靜態文本框顯示的內容*pResult = 0;
}void CMFCApplication9Dlg::OnNMCustomdrawSlider3(NMHDR *pNMHDR, LRESULT *pResult)
{LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);// TODO: 在此添加控件通知處理程序代碼//UpdateData(TRUE);test_Bvalue = test_B.GetPos();CString cstr;cstr.Format(_T("%d"), test_Bvalue);//轉換為字符串SetDlgItemText(IDC_EDIT3, cstr);//設置靜態文本框顯示的內容COLORREF test_color1 = RGB(test_R.GetPos(), test_G.GetPos(), test_B.GetPos());CString colorstr;colorstr.Format(_T("%d"), test_color1);//轉換為字符串SetDlgItemText(IDC_EDIT4, colorstr);//設置靜態文本框顯示的內容*pResult = 0;
}
4。運行
運行結果:
🌸 MFC進度條控件 | 定時器控制進度
1。新建MFC項目(基于對話框、靜態庫)
2。添加控件,刪除初始的3個多余控件
加1個progress control,修改其marquee為true,添加變量:變量名為test_progress。
加2個按鈕,修改caption為START,STOP。
3。添加代碼
右鍵Dlg — 屬性 — 消息 — VM_TIMER — ADD OnTimer
自動在類的消息映射表中添加了消息映射:
與一個剛新建的mfc項目的MESSAGE MAP對比:
在打開的函數中添加代碼:
void CMFCApplication13Dlg::OnTimer(UINT_PTR nIDEvent)
{// TODO: 在此添加消息處理程序代碼和/或調用默認值switch (nIDEvent){case 1:if (test_progress.GetPos() < 100){test_progress.SetPos(test_progress.GetPos() + 1);}else {test_progress.SetPos(0);}break;default:break;}CDialogEx::OnTimer(nIDEvent);
}
雙擊按鈕1(按鈕1 start,2 stop),添加代碼:
void CMFCApplication13Dlg::OnBnClickedButton1()
{// TODO: 在此添加控件通知處理程序代碼SetTimer(1, 1000, NULL);//第一個參數可以自己設置是定時器的標號,第二個是定時時間(ms)。啟動定時器1,每隔1s刷新一次
}
同理添加按鈕2的代碼
void CMFCApplication13Dlg::OnBnClickedButton2()
{// TODO: 在此添加控件通知處理程序代碼KillTimer(1); //關定時器1
}
4。運行
運行結果:
按停止后再次按開始按鈕,進度條從停止的地方再次開始前移。
MFC進度條控件 | 線程控制進度 …