前言
- 各位师傅大家好,我是qmx_07,今天给大家讲解复杂控件的相关知识点
复杂控件
进度条
- 绘图准备 :
- 调整windows窗口大小、设置 Progress Control 进度条
- 设置Button 按钮
- 添加进度条变量 m_Progress,通过按钮触发
cpp
void CMFCApplication2Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
const int Min = 0;
const int Max = 100000;
m_Progress.SetRange32(Min, Max);
for (size_t i = Min; i < Max; i++)
{
m_Progress.SetPos(i);
}
}
- SetRange32() 用于控制 进度条的最小值和最大值区间
- SetPos()控制进度条的进度
- 通过for循环 依次增加i,形成视觉效果
画面演示:
滑块
-
绘图准备 :
-
调整windows窗口大小,设置Silder Control 滑块控件
-
为滑块 设置变量:m_Slider
-
通过类向导 进入OnInitDialog
cpp
m_Slider.SetRange(0, 100);
m_Slider.SetPos(0);
m_Slider.SetTicFreq(1);
- 设置区间为0-100,当前位置为0
- SetTicFreq()滑块的刻度频率为1,也就是增长1个单位长度
画面演示:
通过滑块 滑动 进度条进度
- 添加WM_HSCROLL 消息
cpp
void CMFCApplication2Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
int ID = pScrollBar->GetDlgCtrlID();
if (IDC_SLIDER1 == ID)
{
int Pos = m_Slider.GetPos();
m_Progress.SetPos(Pos);
}
CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}
- 获取滑动块的ID进行匹配,获取滑块的POS位置,让进度条和滑动块保持一致
- GetDlgCtrlID() 获得控件ID
- GetPos()获取位置
- SetPos()设置位置
画面演示:
顶层菜单
-
添加Menu 菜单
-
设置顶层菜单内容
-
点击对话框属性,设置Menu菜单 绑定
画面演示:
-
显示窗口,但是还没有设置功能
-
菜单栏右键,添加事件处理程序,选择类列表对应的Dialog程序
cpp
void CMFCApplication2Dlg::On32771()
{
// TODO: 在此添加命令处理程序代码
MessageBox(L"Msg", L"消息提示", MB_OK);
}
画面演示:
右键菜单
- 绘图准备 :
- 调整windows窗口大小、设置list control 控件,设置属性view为list
- 添加变量 m_list
- 选择对应的list control 对象 ,选择NM_RLICK消息(右键),添加消息处理程序
cpp
void CMFCApplication2Dlg::OnRclickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
POINT pt = { 0 };
GetCursorPos(&pt);//获取鼠标的位置
HMENU hMenu = LoadMenu((HINSTANCE)GetWindowLongPtr(m_hWnd, GWLP_HINSTANCE), MAKEINTRESOURCE(IDR_MENU1));//加载IDR_MENU1菜单
HMENU hSubMenu = GetSubMenu(hMenu, NULL);//加载子菜单
TrackPopupMenu(hSubMenu, TPM_CENTERALIGN, pt.x, pt.y, 0, m_hWnd, NULL);//弹出菜单
*pResult = 0;
}
- TrackPopupMenu()显示子菜单
- TPM_CENTERALIGN菜单在水平向上居中显示
- 代码: 获取鼠标位置,加载菜单 子菜单资源,打印在鼠标居中的位置
画面演示:
热键消息
- 进入类向导 -> 虚函数 -> 编辑 OnInitDialg
cpp
#define HOTKEY_USER_MSG 1
- 定义消息码
- 辅助键集合
cpp
//1.窗口句柄 2. 热键消息码 3.辅助键 4. 消息
RegisterHotKey(m_hWnd, HOTKEY_USER_MSG, MOD_SHIFT, VK_F1);
- 注册 热键
- 添加热键消息 WM_HOTKEY
cpp
void CMFCApplication2Dlg::OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
switch (nHotKeyId)
{
case HOTKEY_USER_MSG:
{
MessageBox(L"Msg");
break;
}
default:
break;
}
CDialogEx::OnHotKey(nHotKeyId, nKey1, nKey2);
}
- 根据nHotKeyId ,判断传进来的热键消息进行匹配
画面演示:
总结
- 介绍了 进度条,滑块,顶层菜单,右键菜单,热键消息的相关知识