精典的ASP传奇的J2EE新生的NETFTP服务器服务器安全WINDOWSB/S 模式WEB安全WAP世界动态网站推广宣传
空间服务器数据库技术邮局服务器站長工具硬设与组建Alexa专题DHTML项目管理WEB标准电脑硬件
病毒知识电脑使用布线协议接入交换路由局域网无线网络网络规划
Visual BasicVisual C/C++MssqlMySqloracleSybase 存在安全风险进程系统进程列表应用程序进程列表其它进程列表
黑客编程漏洞分析本地提权免杀技术脚本漏洞数据库注入安全防护内网渗透加密解密工具使用
WAP技术WAP入门
 您的位置:   >> 相关知识 >> 桌面应用程序 >> Visual C/C++ >>

CEdit,,CTreeCtrl,CComboBox等控件的使用总结

合金网络科技

 
  添加日期:2008-2-2 点击次数:0次  
   
 
 
1.最近几天自己写了一个日志管理软件(为自己使用的),主要的记录每天个人的一些情况,如作息时间,做了些什么事,和一些总结,心得体会等. 但在实现的过程中,由于有好几个月没有用VC++编了,有些控件的使用都不太熟悉了,所以在这里使用到的通用控件的使用方法在这里总结一下.
 
(a) CEdit控件
          这个控件主要是文本输入,如用户名,密码;
          CEdit常用属性使用说明:
          Multiline:   选中这个这属性,表示可以支持多行输入;
          Want return:     表示支持换行;
          Read-only: 选择中,表示只能读,不能修改,文本框为灰色;
          Password: 表示接受的是密码.但显示是***;
          Vertical scroll:表示支持垂直滚动条;
 
          常用函数说明:
          BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
          dwStyle: 表示控件style 常用常使用这几个WS_CHILD , WS_VISIBLE,WS_TABSTOP
          Rect:是一个矩形结构,表示文本框的大小;
          pParentWnd: 父窗口指针;
          nID: 给这个Edit分配的ID号;
 
          BOOL SetReadOnly( BOOL bReadOnly = TRUE ); 设置是否只读;
 
          其他就不介绍了,根据你要实现的功能看看msdn就行了;
 
(b) CComboBox控件
 
又称作组合框控件,其有三种形态可供选择,
1.简单组合框(Simple)2.下拉组合框(Drop-down)3.下拉列表式组合框(Drop-down list).
       CComboBox控件的常用设置属性说明:
type属性:里面一共有三个选项.就是其三种形式, 我们常用的是后两种形态,其区别就是Dropdown的编辑区为可编辑控件,而droplist为静态控件.
       Data属性: 当程序初始化的时候,下拉列表将显示其属性里面的内容,内容用分号分隔.其属性只支持后2中形式,
       Sort属性: 对添加到下拉列表框中的数据自动进行排序,如果你不想他改变你的显示序列,把他设置成False.
       控件是一个窗口.其基类是为CWnd.所以CComboBox也可以使用CWnd的一些函数
 
 1.GetCount() 函数:
 用以获得列表框中的选项数目. int GetCount() const;(此乃函数原型,我会列在每条的后面)下面的例酒是程序中各个按钮里面的代码
              int i;
              CString str;
              i=m_cbox.GetCount();
              str.Format ('%d',i);
              m_end='一共有'+str+'个数据';
               UpdateData(FALSE);
 
 2.GetCurSel() 函数:
 用以得到用户选中下拉列表框中数据的索引值.返回的值是重0开始的,如果没有选择任何选项将会返回-1  
       Int GetCurSel() const
       int i;
       CString str;
       i=m_cbox.GetCurSel ();
       str.Format ('%d',i+1);
       if (i==-1) m_end='你什么都没有选';
       else m_end='你选的是第'+str+'项';
       UpdateData(FALSE);
 
 3.SetCurSel函数:
 选取列表框中的一个选项,索引从0开始,-1为什么都不选.当你需要把列表框中已经选取的内容清空时就可以使用这个函数;
       if(m_i<3) m_cbox.SetCurSel (m_i++);//m_i为int型变量 用以计数
       else
       {
            m_cbox.SetCurSel (-1);
            m_i=0;
        }
 
4.SetEditSel函数:设置编辑区中蓝色选中字段的长度, BOOL SetEditSel( intnStartChar,int nEndChar );                   
nStartChar是起始的位置,当设置为-1时为不选择任何字段,nEndChar是结束位置.还有一个对应的函数GetEditSel是取得其位置,在此不详解.
       m_cbox.SetEditSel (3,5);//在编辑框中打入一串数字在按此按钮就能看到效果
                        //其作用就是选中第3到第5个字符作为热点
 
5.LimitText()函数.
其作用是限制在编辑框中键入的文本长度,BOOL LimitText(int nMaxChars); 当nMaxChars为0时,不是不能输入,而是长度最大化为65535字节
 
6.GetLBText()函数.
其原型为void GetLBText( int nIndex, CString&rString ).
nIndex为列表框中数据的索引值,
rString 为字符串,其作用就是把索引号为
nIndex的数据放到
rString变量中.
与其对应的GetLBTextLen(intnIndex)函数就是得到索引号为
nIndex中数据的长度
          m_cbox.GetLBText (2,m_end); // GetLBText按钮
          UpdateData(0);
          CString str; //GetLBTextLen按钮
          int i=m_cbox.GetLBTextLen (2);
          str.Format ('%d',i);
          m_end=str;
          UpdateData(FALSE);
 
 7.AddString() DeleteString() InsertString() ResetContent()
       四个函数放在一起,他们都是针对下拉列表框的处理函数, AddString(LPCTSTR lpszString) 是在列表框的尾巴添加一条数据,参数为字符串. DeleteString(UINT nIndex)为删除指定索引为nIndex的数据. InsertString(int nIndex, LPCTSTR lpszString)在索引nIndex处插入IpszString的内容. ResetContent()是清除列表框中所有的内容.
 
 8.SetDroppedWidth(UINT nWidth)
       函数.用于设定下拉列表框的最小宽度,当下拉列表框中的数据很长不能完全显示时,我们可以使用这个函数把列表框的宽度设置的大些.同样GetDroppedWidth()是返回列表框的宽度.
 
 
 (c) radio button
 
       常用属性介绍:
       经常使用到的属性就是group 和 tab stop了
       这两个属性是一起使用的,可以把几个radio button归为一组.方法是根据tab-order,把要归为一起的那几个radio button的tab order连续,把第一个设为group属性,取消掉tab stop属性,然后把最后一个radio button取消掉group ,勾上tab stop属性就成功了.这样弄的功能是把它们都关联起来,当选择其中一个,其它的会取消选中.
一般的radio button 都是默认的为 auto,在同为一组的时候点另一个会取消先前选中的那个。
       若要实现你所说的过程,需要取消 auto 属性。
       再为你的这个radio button 添加一个 CButton 类的变量,假设ID为ID_RADIO1,变量名为m_radio1。
     
       不过通过类向导好像无法添加,这时可以手动添加:
       //头文件
       DDX_Control(pDX, IDC_RADIO1,m_radio1);//手动添加的部分
     
       //.cpp文件
       在CPP文件中的DoDataExchange函数中添加如下代码:
       void CTestDlg::DoDataExchange(CDataExchange* pDX)
       {
              CDialog::DoDataExchange(pDX);
              //{{AFX_DATA_MAP(CTestDlg)
              DDX_Control(pDX, IDC_RADIO1,m_radio1);//手动添加的部分
              //}}AFX_DATA_MAP
       }
     
       这样可以完成了变量和radio button关联;
 
       设置radio button 状态可以使用这个函数SetCheck(int n);
       n = 0;表示不选
       n = 1;表示选择
       n = 2;没有用过,不知道.
 
 (d) CTreeCtrl树控件:
 
       我使用这个控件主要是列出自己过去些好了的日志,自己可以通过树控件快速访问以前写的日志;
       这里主要介绍一些常用的函数:
     
       InsertItem()函数,功能是插入一个数节点.它的原型如下:
       HTREEITEM InsertItem( LPTVINSERTSTRUCT lpInsertStruct );
 
       HTREEITEM InsertItem(UINT nMask, LPCTSTR lpszItem, int nImage, int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam, HTREEITEM hParent, HTREEITEM hInsertAfter );
 
       HTREEITEM InsertItem( LPCTSTR lpszItem, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST );
 
       HTREEITEM InsertItem( LPCTSTR lpszItem, int nImage, int nSelectedImage, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST);
 
       这里以:
       HTREEITEM InsertItem( LPCTSTR lpszItem, int nImage, int nSelectedImage, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST);
       这个为例:
 
       lpsezItem: 表示该节点显示时的名称;
       nImage    : 表示结点没被选中时所使用图片序号
       nSelectedImage :为结点被选中时所使用图片序号。
       hParent :代表父结点的句柄
       hInsertAfter: 当前添加的结点会排在hInsertAfter表示的结点的后面, 默认值是最后面;
 
       使用小图标时,要使用CTreeCtrl类的成员函数CImageList* SetImageList( CImageList * pImageList, int nImageListType ),指明当前控件所使用的图像列表(ImageList),nImageListType为TVSIL_NORMAL。
 
       此外CTreeCtrl还提供了一些函数用于得到/修改控件的状态:
 
       ·HTREEITEM GetSelectedItem( )将返回当前选中的结点的句柄;
 
       ·BOOL SelectItem( HTREEITEM hItem )将选中指明结点;
 
       ·BOOL GetItemImage( HTREEITEM hItem, int& nImage, int& nSelectedImage )
       BOOL SetItemImage( HTREEITEM hItem, int nImage, int nSelectedImage )
       用于得到/修改某结点所使用图标索引;
 
       ·CString GetItemText( HTREEITEM hItem ) /BOOL SetItemText( HTREEITEM hItem, LPCTSTR lpszItem )
       用于得到/修改某一结点的显示字符;
 
       ·BOOL DeleteItem( HTREEITEM hItem )用于删除某一结点,BOOL DeleteAllItems( )将删除所有结点。
     
     此外如果想遍历树可以使用下面的函数:
 
       ·HTREEITEM GetRootItem( )得到根结点;
 
       ·HTREEITEM GetChildItem( HTREEITEM hItem )得到酒结点;
 
    ·HTREEITEM GetPrevSiblingItem/GetNextSiblingItem( HTREEITEM hItem )
       得到指明结点的上/下一个兄弟结点;
 
       ·HTREEITEM GetParentItem( HTREEITEM hItem )得到父结点。
 
树形控件的消息映射使用ON_NOTIFY宏,形式如同:
       ON_NOTIFY( wNotifyCode, id, memberFxn ),wNotifyCode为通知代码,id为产生该消息的窗口ID,
       memberFxn为处理函数,函数的原型如同void OnXXXTree(NMHDR* pNMHDR,LRESULT* pResult),
       其中pNMHDR为一数据结构,在具体使用时需要转换成其他类型的结构。对于树形控件可能取值和对应的数据结构为:
 
         ·TVN_SELCHANGED 在所选中的结点发生改变后发送,所用结构:NMTREEVIEW;
 
         ·TVN_ITEMEXPANDED 在某结点被展开后发送,所用结构:NMTREEVIEW;
 
         ·TVN_BEGINLABELEDIT 在开始编辑结点字符时发送,所用结构:NMTVDISPINFO;
 
         ·TVN_ENDLABELEDIT 在结束编辑结点字符时发送,所用结构:NMTVDISPINFO;
 
         ·TVN_GETDISPINFO 在需要得到某结点信息时发送,(如得到结点的显示字符)所用结构:NMTVDISPINFO;
 
 (e) 日期控件:COleDateTime,
       GetCurrentTime( );
       获得当前时间;
 
       int SetDateTime( int nYear, int nMonth, int nDay, int nHour, int nMin, int nSec );
       设置日期和时间
 
       int SetDate( int nYear, int nMonth, int nDay );
       设置日期
 
       int SetTime( int nHour, int nMin, int nSec );
       设置时间
 
       CString Format( LPCTSTR lpszFormat ) const;
       把日期时间格式化到字符串中
       形式有:
       %H: 小时
       %M: 分钟
       %S: 秒
       %Y: 年
       %m: 月
       %d: 日
     
       Get之类的函数就不介绍了.比较简单,看看msdn就行了.
 
       msdn:上的完整说明:
       %a
       Abbreviated weekday name
 
       %A
       Full weekday name
 
       %b
       Abbreviated month name
 
       %B
       Full month name
 
       %c
       Date and time representation appropriate for locale
 
       %d
       Day of month as decimal number (01 – 31)
 
       %H
       Hour in 24-hour format (00 – 23)
 
       %I
       Hour in 12-hour format (01 – 12)
 
       %j
       Day of year as decimal number (001 – 366)
 
       %m
       Month as decimal number (01 – 12)
 
       %M
       Minute as decimal number (00 – 59)
 
       %p
       Current locale’s A.M./P.M. indicator for 12-hour clock
 
       %S
       Second as decimal number (00 – 59)
 
       %U
       Week of year as decimal number, with Sunday as first day of week (00 – 53)
 
       %w
       Weekday as decimal number (0 – 6; Sunday is 0)
 
       %W
       Week of year as decimal number, with Monday as first day of week (00 – 53)
 
       %x
       Date representation for current locale
 
       %X
       Time representation for current locale
 
       %y
       Year without century, as decimal number (00 – 99)
 
       %Y
 
       Year with century, as decimal number
 
       %z, %Z
       Time-zone name or abbreviation; no characters if time zone is unknown
 
       %%
       Percent sign
 
       在这里还会涉及把字符串转换成时间格式,可以这样做:
 
       CTime m_StartTime1 = CTime::GetCurrentTime();
       CString csStartTime = m_StartTime1.Format( '%Y%m%d%H%M%S' );
 
       使用sprintf及sscanf函数进行CString与CTime之间的转换
 
       一.将CString转为CTime的几种方法
 
       CString    timestr    =    '2000年04月05日'; 
       int    a,b,c    ; 
       sscanf(timestr.GetBuffer(timestr.GetLength()),'%d年%d月%d日',&a,&b,&c); 
       CTime    time(a,b,c,0,0,0);   
 
       CString    s('2001-8-29    19:06:23'); 
       int nYear,nMonth, nDate, nHour,nMin,nSec; 
       sscanf(s,'%d-%d-%d   %d:%d:%d', &nYear, &nMonth, &nDate, &nHour, &nMin,&nSec); 
       CTime   t(nYear, nMonth ,nDate, nHour, nMin, nSec);
 
       二.将CTIme转换为CString的方法:
       CTime   tmSCan = CTime::GetCurrentTime();
 
       CString szTime = tmScan.Format(''%Y-%m-%d %H:%M:%S'');
 
       这样得到的日期时间字符串就是以'2006-11-27 23:30:59'的格式.这是不是很方便呢?
 
       //取得CTime中的日期
       CString cstrDate = tmScan.Format('%Y-%m-%d');
 
       //取得CTime中的时间
       CString cstrTime = tmScan.Format('%H:%M-%S');
精典的ASP精选TOP
· 利用ADODB.Stream 防盗链
· Adodb.Stream说明手册
· 采集需要登录
· ASP 判断远程图片是否存在
· 在ServerXMLHTTP组件中使用代理服务器
· 用XMLHTTP通过代理服务器从服务提取数据的一些问题
· objXML.readystate的值
· 互联网HTTP连接等出错代码大全
· 利用XMLHTTP实现的二级连动Select
· 利用 xmlhttp 分块上传文件
 
服务器安全点击TOP
· 新云最新漏洞总结篇
· 各类网站的默认数据库和密码
· Windows Server2003 防木马权限设置IIS服务器安全配置整理
· 针对ASP网站的Win 2003硬盘安全设置
· IIS 6 的PHP 最佳配置方法
· 利用SA.exe 将Iusr_victim克隆为Administrator
· Cmd模式下的入侵技术大全
· 破解网页代码加密
· SERV-U 6.4提权方法,通杀SERV-U版本
· 新云网站管理系统文件注入漏洞
 
硬设与组建点击TOP
· 从头到尾教你组建小型局域网20
· 从头到尾教你组建小型局域网19
· 从头到尾教你组建小型局域网18
· 从头到尾教你组建小型局域网17
· 从头到尾教你组建小型局域网16
· 从头到尾教你组建小型局域网15
· 从头到尾教你组建小型局域网14
· 从头到尾教你组建小型局域网13
· 从头到尾教你组建小型局域网12
· 从头到尾教你组建小型局域网11
 
病毒知识点击TOP
· 不再重装 手动清除顽固病毒AutoRUN
· 木马静态变动态 DLL木马程序大揭秘
· 详解一个很牛X的网马
· 一个网马
· Trojan-Downloader.Win32.Delf.bab
· 抓了一个AJAX的网马
· 迅雷5 最新0day利用程序
· 自动关掉270种杀毒软件
· RealPlayer 最新网马
· 五个反弹型后门的源代码
 
WINDOWS点击TOP
· 4【系统知识】常见文件扩展名及简要说明!!! ==超详尽==
· 3【系统知识】常见文件扩展名及简要说明!!! ==超详尽==
· 2【系统知识】常见文件扩展名及简要说明!!! ==超详尽==
· 1【系统知识】常见文件扩展名及简要说明!!! ==超详尽==
· Capture an HTML document as an image
· 如何给eWebEditor编辑器加上运行代码框功能
· 给CuteEditor5增加了高亮代码显示功能
· CuteEditor6.0使用配置心得体会
· 关于IE插件的CLSID问题
· 对开发的程序(制作CAB)进行签名,并允许网站中使用
  "凌风微型文章系统",针对"搜索引擎"完美设计,提高"搜索引擎"对网站容量,质量的评估值,"扁平化,转静态 ..."