一、静态文本

  1. 在代码中动态创建,需要使用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;

设置按钮的风格。参数nStyle指定按钮的风格,bRedraw指定按钮是否重绘,为TRUE则重绘,否则不重绘,默认为重绘

 void SetButtonStyle(UINT nStyle,BOOL bRedraw = TRUE);

  获取按钮控件的风格。

  UINT GetButtonStyle( ) const;

e设置按钮的选择状态。参数nCheck为0表示未选中状态,1表示选中状态,2表示不确定状态(仅用于复选框)。

  void SetCheck(int nCheck);

 获取按钮的选择状态。返回值的意义同SetCheck函数的nCheck参数。

  int GetCheck( ) const;

设置要显示到按钮上的光标图。参数hCursor指定了光标的句柄。返回值为按钮原来光标的句柄。

HCURSOR SetCursor(HCURSOR hCursor);

 获取之前由SetCursor设置的光标的句柄。

HCURSOR GetCursor( );

设置按钮的高亮状态。参数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); 
}