在加入的onsize函数每次修改都重新响应数据 做到自适应
void CRedmanControlDlg::OnSize(UINT nType, int cx, int cy) { CDialogEx::OnSize(nType, cx, cy); // TODO: 在此处添加消息处理程序代码 if (mCListHead.m_hWnd != NULL) { CRect rc; rc.left = 1; //列表的左坐标 rc.top = 5; //列表的上坐标 rc.right = cx - 1; //列表的右坐标 rc.bottom = cy / 3; //列表的下坐标 mCListHead.MoveWindow(rc); } if (CListServer.m_hWnd != NULL) { for (size_t i = 0; i < 5; i++) { CListServer.SetColumnWidth(i, (cx/6)); } CRect rc; rc.left = 1; //列表的左坐标 rc.top = cy/3; //列表的上坐标 rc.right = cx - 1; //列表的右坐标 rc.bottom = (cy / 3)*2; //列表的下坐标 CListServer.MoveWindow(rc); } if (CListLog.m_hWnd != NULL) { for (size_t i = 0; i < 2; i++) { CListLog.SetColumnWidth(i, (cx / 3)); } CRect rc; rc.left = 1; //列表的左坐标 rc.top = (cy / 3) * 2; //列表的上坐标 rc.right = cx - 1; //列表的右坐标 rc.bottom = cy - 6; //列表的下坐标 CListLog.MoveWindow(rc); } }
在list控件上添加菜单
接着增加list列表的右键消息函数
在控件内 鼠标右键函数
void CRedmanControlDlg::OnRclickServer(NMHDR* pNMHDR, LRESULT* pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); // TODO: 在此添加控件通知处理程序代码 CMenu popup; popup.LoadMenu(IDR_MENUSERVER);//载入菜单 CMenu* pM = popup.GetSubMenu(0);//获取菜单句柄 CPoint p; GetCursorPos(&p); //获取屏幕光标位置 if (CListServer.GetSelectedCount() == 0) //如果没有选中 { int count = pM->GetMenuItemCount();//获取菜单条数 for (int i = 0; i < count; i++) { pM->EnableMenuItem(i, MF_BYPOSITION | MF_DISABLED | MF_GRAYED); //菜单全部变灰 } } pM->TrackPopupMenu(TPM_LEFTALIGN, p.x, p.y, this);//弹出菜单 *pResult = 0; }
接着创建菜单里面的响应函数
接着添加头部菜单
//初始化菜单 HMENU hmenu;//LPCWSTR hmenu = LoadMenu(NULL, (LPCWSTR)(IDR_MENUTOP)); //载入菜单资源 ::SetMenu(this->GetSafeHwnd(), hmenu); //为窗口设置菜单 ::DrawMenuBar(this->GetSafeHwnd()); //显示菜单