一、静态文本
在代码中动态创建,需要使用CStatic类的成员函数Create
virtual BOOL Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff );
lpszText:指定要在控件中显示的文字。如果为NULL则不会显示任何文字。
dwStyle:指定静态控件的风格。静态文本框一般都是对话框或其他窗口的子窗口,而且是可见的,所以应该包含WS_CHILD 和WS_VISIBLE风格
SS_BITMAP | 一个位图将显示在静态控件中,Create函数的lpszText参数字符串是资源文件中定义的位图名。此风格忽略宽度和高度参数,静态控件自动调整它的尺寸来适应位图 |
SS_BLACKFRAME | 指定一个具有与窗口边界同色的框,默认为黑色 |
SS_BLACKRECT | 指定一个具有与窗口边界同色的实矩形,默认为黑色 |
SS_CENTER | 使显示的正文居中对齐,正文可以换行 |
SS_GRAYFRAME | 指定一个具有与屏幕背景同色的边框 |
SS_GRAYRECT | 指定一个具有与屏幕背景同色的实矩形 |
SS_ICON | 使控件显示一个在资源中定义的图标,图标的名字由Create 函数的lpszText 参数指定,图标自动调整它的尺寸 |
SS_LEFT | 左对齐正文,正文能回绕 |
SS_LEFTNOWORDWRAP | 左对齐正文,正文不能回绕 |
SS_NOTIFY | 使控件能向父窗口发送鼠标事件消息 |
SS_RIGHT | 右对齐正文,可以回绕 |
SS_SIMPLE | 使静态正文在运行时不能被改变并使正文显示在单行中 |
SS_WHITEFRAME | 指定一个具有与窗口背景同色的框,默认为白色 |
SS_WHITERECT | 指定一个具有与窗口背景同色的实心矩形,默认为白色 |
rect:指定静态控件的位置和大小,它可以是RECT结构体类型,也可以是CRect类的对象。
pParentWnd:指定静态控件的父窗口,通常是一个CDialog对象,不能是NULL。
nID:指定静态控件的ID。
cs = new CStatic(); cs->Create("hello world", WS_CHILD|WS_VISIBLE|SS_CENTER, CRect(50,80, 150, 150), this);
二、编辑框 Edit Control
1.与静态文本框的创建类似,除了可以在对话框模板上拖进一个编辑框,然后关联一个变量或通过API函数使用,也可以在程序中动态创建编辑框,即调用CEdit类的成员函数Create。Create成员函数的原型如下
virtual BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
2. dwStyle:指定编辑框的风格。可以是MSDN中“edit styles”包含风格的任意组合。下面是“edit styles”的所有风格说明。
ES_AUTOHSCROLL:当用户在行尾键入一个字符时,正文将自动向右滚动10 个字符,当用户按回车键时,正文总是滚向左边
ES_AUTOVSCROLL: 当用户在最后一个可见行按回车键时,正文向上滚动一页
ES_CENTER: 在多行编辑框中使正文居中
ES_LEFT :左对齐正文
ES_LOWERCASE: 把用户输入的字母统统转换成小写字母
ES_MULTILINE:指定一个多行编辑器。若多行编辑器不指定ES_AUTOHSCROLL 风格,则会自动换行,若不指定ES_AUTOVSCROLL,则多行编辑器会在窗口中正文装满时
发出警告声响
ES_NOHIDESEL:默认时,当编辑框失去输入焦点后会隐藏所选的正文,当获得输入焦点时又显示出来。设置该风格可禁止这种默认行为
ES_NUMBER :编辑框中只允许输入数字
ES_OEMCONVERT:使编辑框中的正文可以在ANSI 字符集和OEM 字符集之间相互转换。这在编辑框中包含文件名时是很有用的
ES_PASSWORD: 使所有键入的字符都用“*”来显示
ES_READONLY: 将编辑框设置成只读的
ES_RIGHT :右对齐正文
ES_UPPERCASE: 把用户输入的字母统统转换成大写字母
ES_WANTRETURN:使多行编辑器接收回车键输入并换行。如果不指定该风格,按回车键会选择默认的命令按钮,这往往会导致对话框的关闭
除了上面的风格外,编辑款一般还会设置WS_CHILD、WS_VISIBLE、WS_BORDER等窗口风格。另外,编辑框可以是多行的,也就是在编辑框中显示多行文字,这就需要设置ES_MULTILINE风格,如果想要多行编辑框支持回车键,则还要设置ES_WANTRETURN。
对于在对话框模板中创建的编辑框,它的属性中包含了上述的风格,例如,Multiline属性对应的就是ES_MULTILINE风格,Want Return属性对应ES_WANTRETURN风格。
三、Cbutton 单选框 复选框
1.CButton类的Create成员可动态创建Button
2.常用方法
a设置显示的位图
HBITMAP SetBitmap(HBITMAP hBitmap);
HBITMAP hBitmap; hBitmap=(HBITMAP)::LoadImage(::AfxGetInstanceHandle(),_T("aaa.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION); CButton *btn = (CButton*)GetDlgItem(IDC_BUTTON1); btn->SetBitmap(hBitmap);
b 获取之前由SetBitmap函数设置的按钮位图的句柄。
HBITMAP GetBitmap( ) const;
c 设置按钮的风格。参数nStyle指定按钮的风格,bRedraw指定按钮是否重绘,为TRUE则重绘,否则不重绘,默认为重绘
void SetButtonStyle(UINT nStyle,BOOL bRedraw = TRUE);
d 获取按钮控件的风格。
UINT GetButtonStyle( ) const;
e设置按钮的选择状态。参数nCheck为0表示未选中状态,1表示选中状态,2表示不确定状态(仅用于复选框)。
void SetCheck(int nCheck);
f 获取按钮的选择状态。返回值的意义同SetCheck函数的nCheck参数。
int GetCheck( ) const;
g 设置要显示到按钮上的光标图。参数hCursor指定了光标的句柄。返回值为按钮原来光标的句柄。
HCURSOR SetCursor(HCURSOR hCursor);
h 获取之前由SetCursor设置的光标的句柄。
HCURSOR GetCursor( );
i 设置按钮的高亮状态。参数bHighlight指定按钮是否高亮显示,非0则高亮显示,否则取消高亮显示状态。
void SetState(BOOL bHighlight);
j UINT GetState( ) const;
获取按钮控件的选择状态、高亮状态和焦点状态。我们可以通过将返回值与各个掩码相与来获得各种状态值,掩码与对应的相与结果说明如下:
掩码0x0003:用来获取单选按钮或复选框的状态。相与结果为0表示未选中,1表示被选中,2表示不确定状态(仅用于复选框)。
掩码0x0004:用来判断按钮是否是高亮显示。相与结果为非0值表示按钮是高亮显示的。当单击按钮并按住鼠标左键时,按钮会呈高亮显示。
掩码0x0008:相与结果为非零值表示按钮拥有输入焦点。
四、图片控件
1动态加载图片
type选择Bitmap
// TODO: Add your control notification handler code here CBitmap bitmap; // CBitmap对象,用于加载位图 HBITMAP hBmp; // 保存CBitmap加载的位图的句柄 bitmap.LoadBitmap(IDB_BITMAP1); // 将位图IDB_BITMAP1加载到bitmap hBmp = (HBITMAP)bitmap.GetSafeHandle(); // 获取bitmap加载位图的句柄 m_jzmPicture.SetBitmap(hBmp); // 设置图片控件m_jzmPicture的位图图片为IDB_BITMAP1
五、右键菜单 实现鼠标右键消息处理
void CtestDlg::OnRButtonDown(UINT nFlags, CPoint point) { CMenu menu; // 菜单(包含主菜单栏和子菜单) CMenu *pSubMenu; // 右键菜单 menu.LoadMenu(IDR_MENU1); pSubMenu = menu.GetSubMenu(0); ClientToScreen(&point); // 弹出右键菜单,菜单左侧与point.x坐标值对齐 pSubMenu->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this); }