zoukankan      html  css  js  c++  java
  • 【转】VC6控件小记

    2009-05-12 21:52

    通用控件被包含在:COMCTL32.DLL

    控件变量类型:

    Value:关联值类型。→获得pulic变量(int & CString)

                         UpdateDataFALSE):可以向控件传递数据

                         UpdateDataTRUE):可以从控件获得数据

    Control:通过GetSafeHwnd()得到控件句柄。→获得控件的实例,可调用控件支持函数。


    Check Box


    添加一个control变量(m_check)

    //获取复选框选中状态
    BOOL bCheck = m_check..GetCheck();


    Edit control

    添加一个value变量,初始化在OnInitDialog()中赋值。

    使用UpdateDataFALSE)、UpdateDataTRUE)与控件交互。

       


    List Box

    //添加列信息
       CString str;
       m_ctllist.AddString(str);
    //删除列信息
       int nItem;
       nItem = m_ctllist.GetCurSel();
       if (n_ltem == LB_ERR)
    {
       return;
    }
       m_ctllist.DeleteString(nItem);
    //获取信息条数
       m_ctllist.GetCount();
    //获取信息内容
       int n;
    //第几行
       CString s;
       m_ctllist.GetText(n,s);

    List Control (列表控件)

    MFC中使用CListCtrl类来封装列表控件的各种操作

    列表控件可以看作是功能增强的ListBox,提供了四种风格,LVS_ICON(大图标) LVS_SMALLICON(小图标) LVS_LIST(列表) LVS_REPORT(报表)。(在控件属性中的View中进行设置)。

    为列表控件添加一个控制变量(m_list),通过其对相应函数进行调用。

    报表风格 LVS_REPORT
    SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); //加网格

    //List title (报表风格就必须先设置列表控件中的列信息)
    int InsertColumn( int nCol, LPCTSTR lpszColumnHeading, int nFormat , int nWidth, int nSubItem);
          iCol为列的位置(列号),从零开始
          lpszColumnHeading为显示的列名
          nFormat为显示对齐方式
           nWidth为显示宽度
           nSubItem为分配给该列的列索引

    int SetColumnWidth(int nCol,int nWidth); //设置列宽

    CRect rect;
    m_list.GetClientRect(rect);                                //获得当前客户区信息
    m_list.SetColumnWidth(0,rect4.Width()/4);      

    m_list.SetColumnWidth(1,rect4.Width()/4);
    m_list.SetColumnWidth(2,rect4.Width()/4);
    m_list.SetColumnWidth(3,rect4.Width()/4);


    //List content


    插入显示数据
    int InsertItem( int nItem, LPCTSTR lpszItem );
    //可以在列表控件中nItem指明位置插入一项,lpszItem为显示字符
    BOOL SetItemText(int nItem, int nSubItem, LPTSTR lpszText ); //可以设置每列的显示字符。nItem为设置的项的位置(行号),nSubItem为列位置(列号),lpszText为显示字符。

    获取显示数据
    CString GetItemText( int nItem, int nSubItem ); //用于得到某项的显示字符

    删除显示数据
    BOOL DeleteItem(int nItem);   //用于删除某一项
    BOOL DeleteAllItems( );        
    //将删除所有项

    相关操作
    void SetItemCount( int iCount );      //用于得到添加进列表中项的数量

    //界面
    得到/修改控件的状态
    COLORREF GetTextColor( )/BOOL SetTextColor( COLORREF cr ); //用于得到/设置显示的字符颜色
    COLORREF GetTextBkColor( )/BOOL SetTextBkColor( COLORREF cr ); //用于得到/设置显示的背景颜色
    BOOL SetBkImage(HBITMAP hbm, BOOL fTile , int xOffsetPercent, int yOffsetPercent); //用于设置背景位



    示例:
    1.添加ListControl 控件,属性中的Appearance属性页下的View选择Report。
    并设置其对应的控制变量如:m_list。

    2.初始化,即设置list title
       m_list.InsertColumn(0,_T("From"),LVCFMT_LEFT);
       m_list.InsertColumn(1,_T("To"),LVCFMT_LEFT);
       m_list.InsertColumn(2,_T("Sbuject"),LVCFMT_LEFT);
       m_list.InsertColumn(3,_T("Date"),LVCFMT_LEFT);
    CRect rect;
    m_list.GetClientRect(rect);                     
    m_list.SetColumnWidth(0,rect4.Width()/4);
    m_list.SetColumnWidth(1,rect4.Width()/4);
    m_list.SetColumnWidth(2,rect4.Width()/4);
    m_list.SetColumnWidth(3,rect4.Width()/4);

    这部分初始化操作,最好放在对话框类的OnInitDialog()函数里,自动初始化。

    3.插入数据

    //插入第一个数据,即第0条数据。先插入,然后在修改其他的信息。
    m_list.InsertItem(0,"<jane@126.com>");    
    //修改第0条数据的其他信息。
    m_list1.SetItemText(0,1,"<nina@126.com> ");    
    m_list1.SetItemText(0,2,"ok");
    m_list1.SetItemText(0,3,"2009-01-01");
    4.删除所有数据
       m_list.DeleteAllItems();

    补充:
    <1>列可与一个结构体关联
    //添加一个项目
    int nItem = m_list.InsertItem(m_list.GetItemCount(), _T("content"));
    //创建自定义结构(不能使用局部变量)
    ITEMDATA *pData = new ITEMDATA;
    //设置项目数据
    m_list.SetItemData(nItem, (DWORD)pData);
    //获取项目数据
    ITEMDATA *pData = (ITEMDATA *)m_list.GetItemData(nItem);
    //删除MyListCtrl中的项目前
    delete (ITEMDATA *)m_list.GetItemData(nItem);

    <2>带有CheckBox的CListCtrl中Check状态的获取
    a. 建立测试工程

         新建一个对话框工程,并添加一个CListCtrl控件,并关联一个成员变量m_List。

    b. 设置LVS_EX_CHECKBOXES风格
         ListView_SetExtendedListViewStyle(m_List.GetSafeHwnd(), m_List.GetExStyle() | LVS_EX_CHECKBOXES);

    c.为listctrl添加测试项
         在OnInitDialog()中添加如下代码:
          m_List.InsertColumn(0,"Name",LVCFMT_LEFT,150);
          m_List.InsertColumn(1,"Sex",LVCFMT_LEFT,200);
          m_List.InsertItem(0, "jane");
          m_List.InsertItem(1, "nina");

    d.添加控件通知消息
         为ListCtrl控件添加LVN_ITEMCHANGED消息。系统生成如下代码:
    void CXXXDlg::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
    {
    LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
    // TODO: Add your control notification handler code here
    *pResult = 0;
    }

    e.在LVN_ITEMCHANGED消息处理函数中添加代码如下:
    void CXXXDlg::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
    {
    LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
    // TODO: Add your control notification handler code here
    if((pNMLV->uOldState & INDEXTOSTATEIMAGEMASK(1)) /* old state : unchecked */
       && (pNMLV->uNewState & INDEXTOSTATEIMAGEMASK(2)) /* new state : checked */
       )
    {
       TRACE("Item %d is checked\n", pNMLV->iItem);
    }
    else if((pNMLV->uOldState & INDEXTOSTATEIMAGEMASK(2)) /* old state : checked */
       && (pNMLV->uNewState & INDEXTOSTATEIMAGEMASK(1)) /* new state : unchecked */
       )
    {
       TRACE("Item %d is unchecked\n", pNMLV->iItem);
    }
    else
    {
       TRACE("Item %d does't change the check-status\n", pNMLV->iItem);
    }

    *pResult = 0;
    }

    f.调试
    在debug环境下,改变checkbox的选中状态,查看输出信息。

      

    progress control(进度指示器)

    m_progress->GetPos(); //获取进度条的当前位置
    m_progress->GetRange(int min,int max); //获取进度条控件的范围的下限和上限
    m_progress->OffsetPos(int nPos); //用指定的增量推进进度条控件的当前位置,重绘进度条反映新位置
    m_progress->SetBkColor(COLORREF clrNew); //设定进度条的背景颜色
    m_progress->SerPos(int nPos); //设定进度条控件的当前位置,重绘进度条反映新位置
    m_progress->SetRange(int min,int max); //设定进度条控件的范围的下限和上限
    m_progress->SetRange32(int min,int max); //设定进度条控件的范围的下限和上限
    m_progress->SetStep(int nStep); //指定进度条控件的步进增量
    m_progress->StepIt(); //通过步进增量,推进进度条控件的当前位置,重绘进度条反映新位置

    应用:
    CProgressCtrl *m_progress; //头文件中声明
    在OnInitDialog初始化
       {
       m_progress = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);
       m_progress->SetRange(0,1000);
       m_progress->SetPos(0);
       UINT m_timer =(UINT) SetTimer(1,200,NULL);
       }

    采用在定时器的消息处理函数WM_TIMER内添加不断更新进度条界面的方法
    OnTimer (nIDEvent)
    {
       pos = pos + 50;
       if(pos>500)
       pos = 0;
       m_Progress->SetPos(pos);
    }
    或者采用在某种循环体内添加不断更新进展条界面的方法

    Tab control

    1、添加上一个Tab Control 控件
    为这个控件添加一个变量,如:m_tabctrl
    2、创建两个新的对话框资源,其属性作如下修改:
        Border:none //边界为空,这样它就没了标题栏
        Style :Child // 这样这个模板就可以当作另一个窗口的子窗口了。
        可在上面加一些控件,具体操作跟普通对话框没有区别。
        完成后从这两个对话框模板生成两个新的对话框类。
    3、在主对话框中为新添加进来的两个类增加两个变量:
    如:CDialog1 m_mm1;
         CDialog2 m_mm2;
    4、在主对话框的OnInitDialog()函数中添加如下类似的代码:
    TCITEM item;
    item.mask = TCIF_TEXT;
    //标签控件增加两个标签页面,文本是标题
    item.pszText = "Fist";
    m_tabctrl.InsertItem (0,&item);
    item.pszText ="Second";
    m_tabctrl.InsertItem (1,&item);

    m_mm1.Create (IDD_DIALOG1,&m_tabctrl);
    m_mm2.Create (IDD_DIALOG2,&m_tabctrl);

    //设置这两个对话框在Z顺序中的位置,显示或隐藏状态
    m_mm1.SetWindowPos (NULL,10,30,400,100,SWP_SHOWWINDOW);
    m_mm2.SetWindowPos (NULL,10,30,400,100,SWP_HIDEWINDOW );

    5、在主对话框中为标签控件添加一个标签选择改变(TCN_SELCHANGE)的控件通知消息,以便在用户选择标签时通知主对话框。在主对话框的编辑界面右击标签控件,选择添加一个事件可以完成这个操作。
    在事件处理中添加如下代码,如下例:
    void CtabdialogDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
    {
    //为了不使显示的子对话框覆盖标签控件的显示,要获得标签控件的尺寸后再设置各页面的尺寸
    CRect r;
    m_tabctrl.GetClientRect (&r);

    //选择标签页
    switch(m_tabctrl.GetCurSel())
    {
    case 0:
    m_mm1.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_SHOWWINDOW);
    m_mm2.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_HIDEWINDOW );
    break;
    case 1:
    m_mm1.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_HIDEWINDOW);
    m_mm2.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_SHOWWINDOW );
    break;
    }
    *pResult = 0;
    }
    或者:
    m_Tab.InsertItem(0,"第一页");
    m_Tab.InsertItem(1,"第二页");
    m_Tab.InsertItem(2,"第三页");
    m_Tab.InsertItem(3,"第四页");


    m_PageA.Create(IDD_PROPPAGE_A,&m_Tab);
    m_PageB.Create(IDD_PROPPAGE_B,&m_Tab);
    m_PageC.Create(IDD_PROPPAGE_C,&m_Tab);
    m_PageD.Create(IDD_PROPPAGE_D,&m_Tab);

    m_PageA.ShowWindow(SW_SHOW);
    m_PageB.ShowWindow(SW_HIDE);
    m_PageC.ShowWindow(SW_HIDE);
    m_PageD.ShowWindow(SW_HIDE);

  • 相关阅读:
    打开一个网页,以html代码保存于txt文件中
    用C查看系统任务管理器中运行的程序
    常见两种LINK错误
    怎么把下载的dll和def生成lib,以用于编程
    建立一个不能打开的文件(占坑)C语言高级API调用
    [转]软件版本命名格式
    回调函数编写和注重点
    ubuntu linux mysql 开发模式与连接编译
    创建一个进程和两个管道,实现与进程通信
    hdoj 1115 Lifting the Stone (求多边形重心)
  • 原文地址:https://www.cnblogs.com/vic_lu/p/2030092.html
Copyright © 2011-2022 走看看