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;
}
View Code
复制代码

 

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
           }
      }

 

posted @   scott_h  阅读(537)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 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)
点击右上角即可分享
微信分享提示