MFC 控件 comboBox Button CheckBox RadioButton ListControl EditBox HotKey IPAddress
MFC控件使用说明(combo box Button Check Box Radio Button List Control Edit Box Hot Key IP Address....)
http://blog.csdn.net/yiyefangzhou24/article/details/7193375/
自绘控件
http://welkangm.blog.163.com/blog/static/190658510201232333137225/
http://www.tuicool.com/articles/qER3uu
http://blog.csdn.net/guoxiaoqian8028/article/details/26103607
【Domodal】
模态窗口和非模态窗口 创建方式不同
CConfigDlg 继承CDialog
模态窗口的创建
CConfigDlg ConfigDlg;
if(ConfigDlg.DoModal() == IDOK) {}
====
非模态窗口的创建
CConfigDlg *m_ConfigDlg = new CConfigDlg();//一般用于成员函数
ConfigDlg->Create(IDD_DLG_CONNECT_STREAM,this);
ConfigDlg->CenterWindow();//居中
ConfigDlg.ShowWindow(SW_SHOWNORMAL);
记得 SAFE_DELETE(m_ConfigDlg);
【check Box】
获取状态 是否check
方案1:
#define BST_UNCHECKED 0x0000
#define BST_CHECKED 0x0001
if (BST_CHECKED == IsDlgButtonChecked(IDC_CHECK) )
{
}
方案2:
CButton* pBtn = (CButton*)GetDlgItem(IDC_CHECK);
int state = pBtnNONE->GetCheck();
设置check状态
方案1:
//nCheck的值为0表示按钮未被选择,为1表示按钮被选择,为2表示按钮处于不确定状态(仅用于复选框)。
CheckDlgButton(IDC_CHECK,nIsMain);
方案2:
CButton* pBtn = (CButton*)GetDlgItem(IDC_CHECK);
pBtn->SetCheck(1);
当然也可以,一个按钮对应一个button类,然后直接GetCheck() SetCheck()
参考 http://blog.sina.com.cn/s/blog_4ac0a0d30100cgd7.html
======================
修改OCX的 class ID
每个OCX都有4个,
NVR ActiveX Control module
Dispatch interface for NVR Control
Event interface for NVR Control
NVR Control
根据ODL, idl 文件查看。
然后XX.cpp 中修改这些值,
生成借口类, 创建个新的MFC工程exe ,打开资源文件*.RC ,[Insert ActiveX Control ] ,选择后,
【ClassWizard】 选择 【Member Varibles】双击 IDC_XXXX ,生成接口类文件
还需要添加控制类。
进入 IDS_DHDEVICECONFIG 查看内容,可以修改这个名字([Insert ActiveX Control ] 看到的就是这个值)
IMPLEMENT_OLECTLTYPE(CDHDeviceConfigCtrl, IDS_DHDEVICECONFIG, _dwDHDeviceConfigOleMisc)
其他的修改OCX,没啥了。
ClistCtrl
http://blog.csdn.net/crich_moon/article/details/6104526
http://yq1518602434.blog.163.com/blog/static/20293708420125188262312/

1、设置CListCtrl选中行 m_list.SetItemState(nIndex,LVIS_FOCUSED | LVIS_SELECTED,LVIS_FOCUSED | LVIS_SELECTED); 注意:这句代码只是让指定行高亮显示,如果使用后再用GetSelectionMark函数来得到选中行,结果往往是错误的。比如,先用鼠标点击选中第5行,调用GetSelectionMark函数得到的是4(第5行),再调用SetItemState函数选中第2行,然后调用GetSelectionMark函数得到的还是4(第5行),所以,需要在设置选中行高亮显示时,一般与SetSelectionMark函数连用: m_list.SetItemState(nIndex, LVIS_FOCUSED | LVIS_SELECTED,LVIS_FOCUSED | LVIS_SELECTED); //选中行 m_list.SetSelectionMark(nIndexs); 2、取消CListCtrl选中行 m_list.SetItemState(nIndex, 0, LVIS_SELECTED); m_list.SetSelectionMark(-1); 3、CListCtrl选中行改变 项目中用到ClistCtrl,当选中行改变时,另外一个控件的详细信息也随之改变,最开始使用鼠标点击事件: void CMyDlg::OnClickList(NMHDR* pNMHDR, LRESULT* pResult) { TODO: Add your control notification handler code here int nIndex = m_list.GetSelectionMark(); if (nIndex >=0) { //要进行的操作 } } 后来发现,用鼠标点击并不完善,因为如果用键盘来切换选中行的话,另一控件的信息就改变不了,于是改用响应LVN_ITEMCHANGED消息,发现改变选中行时会有好几个LVN_ITEMCHANGED消息,加入判断即可: void CMyDlg::OnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; // TODO: Add your control notification handler code here if(pNMListView->uChanged == LVIF_STATE) { if(pNMListView->uNewState) { int nIndex = pNMListView->iItem; //要进行的操作 } } *pResult = 0; }
7. 得到listctrl中所有选中行的序号
原理 判断选中是判断每个行的状态,
m_list.SetItemState(nIndex, LVIS_FOCUSED | LVIS_SELECTED,LVIS_FOCUSED | LVIS_SELECTED); //选中行
m_list.SetSelectionMark(nIndexs);
然后再获取修改状态的(mark)的那行,
否则就for循环获取,修改状态的行,(记得要在 OnLVNItemchangedList事件中 )
方法一:
CString str;
for(int i=0; i<m_list.GetItemCount(); i++)
{
if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )
{
str.Format(_T("选中了第%d行"), i);
AfxMessageBox(str);
}
}
方法二:
POSITION pos = m_list.GetFirstSelectedItemPosition();
if (pos == NULL)
TRACE0("No items were selected!/n");
else
{
while (pos)
{
int nItem = m_list.GetNextSelectedItem(pos);
TRACE1("Item %d was selected!/n", nItem);
// you could do your own processing on nItem here
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)