1.控件的创建
// 创建静态文本框(StaticEdit) HWND hStaticEdit = CreateWindowEx(0, TEXT("Static"), TEXT("StaticEdit1"), WS_VISIBLE | WS_CHILD | SS_LEFT, 10, 10, 100, 30, hWnd, NULL, hInstance, 0); // 创建静态文本,水平居中 HWND hStaticEdit2 = CreateWindowEx(0, TEXT("Static"), TEXT("StaticEdit2"), WS_VISIBLE | WS_CHILD | WS_BORDER|SS_CENTER, 10, 50, 100, 30, hWnd, NULL, hInstance, 0); // 创建显示图标的静态文本框 HWND hStaticEdit3 = CreateWindowEx(0, TEXT("Static"), NULL, WS_VISIBLE | WS_CHILD | SS_ICON, 10, 90, 100, 30, hWnd, NULL, hInstance, 0); HICON hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1)); SendMessage(hStaticEdit3, STM_SETICON, (WPARAM)hIcon, 0); // 创建显示位图的静态文本框 HWND hStaticEdit4 = CreateWindowEx(0, TEXT("Static"), NULL, WS_VISIBLE | WS_CHILD | SS_BITMAP, 10, 130, 100, 30, hWnd, NULL, hInstance, 0); HBITMAP hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1)); SendMessage(hStaticEdit4, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBitmap); |
效果图:
2.控件样式
SS_BITMAP | 位图将显示在静态控件中。 文本是位图的名称, (不是资源文件中其他地方定义的文件名) 。 样式忽略 nWidth 和 nHeight 参数;控件会自动调整自身大小以适应位图。 |
SS_BLACKFRAME | 一个框,以与窗口框架相同的颜色绘制框架。 此颜色在默认配色方案中为黑色。 |
SS_BLACKRECT | 用当前窗口框架颜色填充的矩形。 此颜色在默认配色方案中为黑色。 |
SS_CENTER | 一个简单的矩形,并将矩形中的文本居中。 文本在显示之前设置格式。 沿行末尾延伸的单词会自动包装到下一个居中线的开头。 超过控件宽度的单词将被截断。 |
SS_CENTERIMAGE | 位图以包含它的静态控件居中。 控件的大小不会调整,因此将剪裁控件的位图太大。 如果静态控件包含一行文本,则文本在控件的工作区中垂直居中。 |
SS_EDITCONTROL | 静态控件复制多行编辑控件的文本显示特征。 具体而言,平均字符宽度的计算方式与编辑控件相同,并且函数不显示部分可见的最后一行。 |
SS_ENDELLIPSIS | 如果字符串的末尾不适合矩形,则会截断并添加省略号。 如果字符串末尾的单词超出矩形的限制,则会在不省略号的情况下被截断。 使用此样式将强制控件的文本位于一行中,没有换行。 与 SS_PATHELLIPSIS 和 SS_WORDELLIPSIS进行比较。 |
SS_ENHMETAFILE | 增强型图元文件将显示在静态控件中。 文本是图元文件的名称。 增强型图元文件静态控件具有固定大小;将缩放图元文件以适应静态控件的工作区。 |
SS_ETCHEDFRAME | 使用 EDGE_ETCHED 边缘样式绘制静态控件的框架。 有关详细信息,请参阅 DrawEdge 函数。 |
SS_ETCHEDHORZ | 使用 EDGE_ETCHED 边缘样式绘制静态控件的上边缘和下边缘。 有关详细信息,请参阅 DrawEdge 函数。 |
SS_ETCHEDVERT | 使用 EDGE_ETCHED 边缘样式绘制静态控件的左右边缘。 有关详细信息,请参阅 DrawEdge 函数。 |
SS_GRAYFRAME | 具有与屏幕背景相同的颜色绘制的框, (桌面) 。 默认配色方案中此颜色为灰色。 |
SS_GRAYRECT | 一个用当前屏幕背景色填充的矩形。 默认配色方案中此颜色为灰色。 |
SS_ICON | 要显示在对话框中的图标。 如果控件作为对话框的一部分创建,则文本是图标的名称, (不是资源文件中其他地方定义的文件名) 。 如果控件是通过 CreateWindow 或相关函数创建的,则文本是图标的名称, (不是在与 hInstance 参数为 CreateWindow 参数指定的模块中指定的模块中定义的文件名) 。 |
SS_LEFT | 一个简单的矩形,并将矩形中的文本左对齐。 文本在显示之前设置格式。 沿行末尾延伸的单词会自动包装到下一个左对齐行的开头。 超过控件宽度的单词将被截断。 |
SS_LEFTNOWORDWRAP | 一个简单的矩形,并将矩形中的文本左对齐。 选项卡已展开,但单词未包装。 将剪裁超过行尾的文本。 |
SS_NOPREFIX | 防止解释控件文本中任何和 () & 字符作为快捷键前缀字符。 这些字符以删除和删除并带下划线的字符串中的下一个字符显示。 此静态控件样式可以包含在任何定义的静态控件中。 可以将 SS_NOPREFIX 与其他样式组合在一起。 当文件名或其他可能包含和 () & 的字符串必须显示在对话框中的静态控件中时,这非常有用。 |
SS_NOTIFY | 当用户单击或双击控件时,发送父窗口 STN_CLICKED、 STN_DBLCLK、 STN_DISABLE和 STN_ENABLE 通知代码。 |
SS_OWNERDRAW | 静态控件的所有者负责绘制控件。 每当需要绘制控件时,所有者窗口都会收到 WM_DRAWITEM 消息。 |
SS_PATHELLIPSIS | 将字符串中间的字符替换为省略号,以便结果适合指定的矩形。 如果字符串包含反斜杠 (\) 字符, SS_PATHELLIPSIS 在最后一个反斜杠后保留尽可能多的文本。 使用此样式将强制控件的文本位于一行中,没有换行。 与 SS_ENDELLIPSIS 和 SS_WORDELLIPSIS进行比较。 |
SS_REALSIZECONTROL | 调整位图以适应静态控件的大小。 例如,更改区域设置可以更改系统字体,因此控件可能会调整大小。 如果静态控件具有位图,则位图将不再适合该控件。 此样式位决定了位图的自动重新定义以适应其控件。 |
SS_REALSIZEIMAGE | 指定使用实际资源宽度并使用 LoadImage 加载图标。 SS_REALSIZEIMAGE 始终与 SS_ICON一起使用。 |
SS_RIGHT | 一个简单的矩形,将矩形中的文本右对齐。 文本在显示之前设置格式。 沿行末尾延伸的字词会自动包装到下一个右对齐行的开头。 超过控件宽度的单词将被截断。 |
SS_RIGHTJUST | 具有SS_BITMAP或SS_ICON样式的静态控件的右下角在调整控件大小时保持固定。 仅调整顶部和左侧,以适应新的位图或图标。 |
SS_SIMPLE | 一个简单的矩形,并在矩形中显示一行左对齐的文本。 不能以任何方式缩短或更改文本行。 此外,如果控件被禁用,控件的文本不会灰显。 |
SS_SUNKEN | 在静态控件周围绘制一个半沉没的边框。 |
SS_TYPEMASK | 复合样式位,用于在 SS_* 样式位上使用 OR 运算符。 可用于屏蔽给定位掩码的有效SS_* 位。 请注意,这已过期,并且未正确包含所有有效样式。 因此,不应使用此样式。 |
SS_WHITEFRAME | 一个框,用与窗口背景相同的颜色绘制框架。 此颜色是默认配色方案中的白色。 |
SS_WHITERECT | 用当前窗口背景色填充的矩形。 此颜色是默认配色方案中的白色。 |
SS_WORDELLIPSIS | 截断任何不适合矩形的单词并添加省略号。 使用此样式将强制控件的文本位于一行中,且不换行。 |
3.控件消息
STM_GETICON 获得控件的图标句柄 WPARAM=0,LPARAM=0,RETURN=HICON
STM_GETIMAGE 获得控件的图标,位图,光标句柄,WPARAM=IMAGE_BITMAP(IMAGE_CURSOR,IMAGE_ICON), LPARAM=0,RETURN=HBITMAP(HCURSOR,HICON)
STM_SETICON 设置控件的图标, WPARAM=HICON,LPARAM=0,RETURN=以前的HICON
STM_SETIMAGE 设置控件的图标,位图,光标,WPARAM=(IMAGE_HBITMAP,IMAGE_ICON,IMAGE_CURSOR), LPARAM=(HBITMAP,HICON,HCURSOR),返回原来的句柄
4.控件通知消息
在父窗口的WM_COMMAND消息中捕获控件的通知消息
STN_CLICKED 控件单击消息,具有SS_NOTIFY样式才有效,WPARAM=LOWORD(控件ID),HIWORD(指定的通知代码), LPARAM=控件句柄
STN_DBLCLK 控件双击消息,具有SS_NOTIFY样式才有效,WPARAM=LOWORD(控件ID),HIWORD(指定的通知代码), LPARAM=控件句柄
STN_DISABLE 禁用控件消息,具有SS_NOTIFY样式才有效,WPARAM=LOWORD(控件ID),HIWORD(指定的通知代码), LPARAM=控件句柄
STN_ENABLE 启用控件消息,具有SS_NOTIFY样式才有效,WPARAM=LOWORD(控件ID),HIWORD(指定的通知代码), LPARAM=控件句柄
WM_CTLCOLORSTATIC 绘制控件背景色和文本颜色,WPARAM=HDC,LPARAM=控件句柄(HWND)
5.实例:
1.修改静态控件的背景色和文本颜色
HDC hdc = (HDC)wParam; if ((HWND)lParam == GetDlgItem(hWnd, 10001)) { SetTextColor(hdc, RGB(0, 120, 215)); SetBkMode(hdc, TRANSPARENT);//OPAQUE,TRANSPARENT g_hBkBrush1=CreateSolidBrush(RGB(255, 174, 201)); return (LRESULT)g_hBkBrush1; } |