对话框和常用控件

本文详细介绍CSpinButtonCtrl的使用方法,包括控件的添加、配置及编程注意事项。此外,还介绍了控件消息处理机制及其通用消息,如按钮状态设置、编辑框操作等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



CSpinButtonCtrl使用说明

CSpinButtonCtrl使用起来比较特殊,使用起来,需要注意一些地方.实际的教程也比较少.为了让后人少走弯路,这里写这篇文章以说明.
1.添加EDIT控件
2.添加Spin控件
如果不是这样的顺序的话,使用ctrl+D改变Tab顺序,使spin紧靠edit后面
3.在EDIT控件上面设置group属性(特别注意)
4.在Spin控件上设置
Auto Buddy 为 true
Set Buddy Integer 为 true
Alignment 为 Right Align
5.添加Edit控件 int 变量 m_nNumK;
这个时候点击向下应该可以增加数值
6.在OnInitDialog中添加以下语句
((CSpinButtonCtrl *)GetDlgItem(IDC_SPIN1))->SetRange(-100, 100);
这个时候向上的箭头为增加,向下的箭头为减小.

 

转载:http://blog.programfan.com/article.asp?id=31168

 

 

下列控件使用说明全来自 网上搜索的《第5章对话框和常用控件.ppt》

5.2.4控件的消息
    控件的编程和使用过程中,可以向控件发送消息来完成特定的任务,或者是根据控件产生的消息执行自己的代码。
    应用程序创建一般控件或公共控件之后,控件的状态发生改变时,控件就会向其父窗口发送消息,这个消息称为“通知消息”。对于每个消息,系统都会用一个MSG结构来记录,MSG具有下列结构:
    typedef struct tagMSG {         // msg 
            HWND       hwnd;          // 接收到消息的窗口句柄
            UINT       message;    // 消息
            WPARAM wParam;   // 消息的附加信息,它的含义取决于message
            LPARAM     lParam;        // 消息的附加信息,它的含义取决于    message
            DWORD  time;    // 消息传送时的时间
            POINT      pt;        // 消息传送时,光标的屏幕坐标
    } MSG;
    对于一般控件来说,通知消息通常是一条WM_COMMAND消息,这条消息的wParam参数的低位字中含有控件标识符,wParam参数的高位字则为通知代码,lParam参数则是指向控件的句柄。

对于公共控件,通知消息通常是一条WM_NOTIFY消息,wParam参数是发送通知消息的控件的标识符,lParam参数是指向NMHDR结构的指针。对于有些控件的通知消息,lParam参数是指向一个更大的结构,且结构中的第一个成员还必须具有NMHDR结构。
尽管控件的各自通知消息并不相同,但下列的通知消息是所有Windows控件所共有的:
    NM_CLICK             在控件中单击鼠标左按钮
    NM_DBLCLK             在控件中双击鼠标左按钮
    NM_RCLICK             在控件中单击鼠标左按钮
    NM_RDBLCLK             在控件中双击鼠标右按钮
    NM_RETURN             当控件具有输入焦点时按下ENTER键
    NM_SETFOCUS         控件得到输入焦点
    NM_KILLFOCUS         控件失去输入焦点
    NM_OUTOFMEMORY         没有足够的内存使控件完成操作

按钮/单选按钮的选中操作
最常用的按钮操作是设置或获取一个或多个按钮的选中状态。CButton类的成员函数SetCheck和GetCheck设置或获取指定按钮的选中状态,原型:
    void SetCheck( int nCheck );
    int GetCheck( ) const;
    nCheck和GetCheck函数返回的值可以是:0表示不选中,1表示选中,2表示不确定(仅用于三态按钮)。
对于多个单选按钮的选中状态的设置或获取,需要使用CWnd类的成员函数CheckRadioButton和GetCheckedRadioButton,原型:
    void CheckRadioButton( int nIDFirstButton, int nIDLastButton, int nIDCheckButton );
    int GetCheckedRadioButton( int nIDFirstButton, int nIDLastButton );
    nIDFirstButton和nIDLastButton指定这组单选按钮的第一个和最后一个按钮ID值,nIDCheckButton指定要设置选中状态的按钮ID值,函数GetCheckedRadioButton返回被选中的按钮ID值。 

编辑框的基本操作
    (1)口令设置
    默认的口令字符是“*”,应用程序可以用成员函数CEdit::SetPasswordChar 来定义自己的口令字符,其函数原型如下:
    void SetPasswordChar( TCHAR ch );
    (2)选择文本
    用鼠标来选择文本的操作方法:在要选择的文本的一端按下鼠标左键并拖动鼠标,到另一端释放鼠标键。
    用键盘来选择文本的方法:在按光标方向移动键的同时,按住Shift键。
    应用程序中可以通过编程选择文本,需要通过调用成员函数CEdit::SetSel 来实现。与该函数相对应的还有CEdit::GetSel和CEdit::ReplaceSel,分别用来获取编辑框中前选择的开始和结束的位置以及替换被选择的文本。
    (3)设置编辑框的页面边距
    设置编辑框的页面边距可以使文本在编辑框显示更具满意效果,应用程序可通过调用成员函数CEdit::SetMargins来实现,函数原型:
    void SetMargins( UINT nLeft, UINT nRight );
    (4)剪帖板操作
    编辑框自动支持文本的复制、粘贴、剪切的键盘操作,对应的快捷健为Ctrl+C、Ctrl+V和Ctrl+X。若应用程序调用CEdit::Undo函数时,还可撤消当前的操作,再调用一次该函数,则恢复刚才的操作。  
(5)获取多行编辑框文本
    一种是使用DDX/DDV,将编辑框控件所关联的变量类型选定为CString后,则不管多行编辑框的文本有多少都可用此变量来保存。这种方法不能单独获得多行编辑框中的某一行文本。
    另一种方法是使用编辑框CEdit类的相关成员函数来获取文本。例如,下面的代码将显示编辑框中第二行的文本内容:
    char str[100];
    if (m_Edit.GetLineCount()>=2)    // 判断多行编辑框的文本是否有两行以上
    {    int nChars;
        nChars = m_Edit.LineLength(m_Edit.LineIndex(1));    // 获取第二行文本的字符个数
    // 0表示第一行,1表示第二行,依次类推。LineIndex用于将文本行转换成
    // 能被LineLength识别的索引
        m_Edit.GetLine(1,str,nChars);    // 获取第二行文本
        str[nChars] = '/0';
        MessageBox(str);
    }

UpData的基本含义:
UpdateData(FALSE);// 将成员变量数据传给控件,并在控件中显示
UpdateData();        // 将控件显示的数据传给成员变量


CListBox的基本用法:
该学生姓名,成绩1,成绩2,成绩3
int nIndex = m_List.AddString(m_strName);    // 向列表框添加学生姓名
// 将该学生成绩与新增的列表项关联起来   
SCORE data;
data.score1 = m_nScore1;
data.score2 = m_nScore2;
data.score3 = m_nScore3;
m_List.SetItemDataPtr(nIndex, new SCORE(data));

//获取
SCORE *data=(SCORE *)m_List.GetItemDataPtr(nIndex);
            m_nScore1 = data->score1;
            m_nScore2 = data->score2;
            m_nScore3 = data->score3;

//delete
for (int nIndex = m_List.GetCount()-1; nIndex>=0; nIndex--)
        {// 删除所有与列表项相关联的SCORE结构数据,并释放内存
             delete (SCORE *)m_List.GetItemDataPtr(nIndex);   
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值