状态栏不是资源,它不需要在资源文件中去创建。
状态栏很简单,但是非常的实用,可以用来做提示,还可以用来显示时间、像素等......
这一节我们练习创建一个状态栏,然后在某一格中显示系统时间,另一格中显示鼠标坐标。
步骤如下:
1. 必须包含头文件:#include <commctrl.h>
2. 声明全局变量:HWND hStatus;
3. 使用CreateWindow创建窗口:
hStatus = CreateWindowEx(0,STATUSCLASSNAME,"",WS_CHILD |
WS_BORDER | WS_VISIBLE, 0, 0,0,0, hwnd, NULL, g_hInst, NULL);
4. 需要一个整数的数组来准备给状态栏分区,数值为绝对值(例如{100,200,300...},注意100,100,80这样是错误的!)然后发送消息SB_SETPARTS
int arr[] = {200,300,400,-1}; //0区0~200,1区200~300,2区300~400,3区剩下的
SendMessageA(hStatus, SB_SETPARTS, 4, (LPARAM)arr); //按数组分4个区
SendMessageA(hStatus, SB_SETTEXTA, 0, (LPARAM)"Hello World!");
5. 显示系统时间 SYSTEMTIME
SetTimer(hwnd, 10, 1000, NULL);
case WM_TIMER:
{
SYSTEMTIME st;
GetLocalTime(&st);
int iHour = st.wHour;
int iMin = st.wMinute;
int iSec = st.wSecond;
char str[20] = {0};
sprintf(str, "%02d:%02d:%02d",iHour,iMin,iSec);
SendMessageA(hStatus, SB_SETTEXTA, 1, (LPARAM)str);
}
6. 显示坐标
case WM_MOUSEMOVE:
{
int x = LOWORD(lParam);
int y = HIWORD(lParam);
char str[20] = {0};
sprintf(str, "X: %3d, Y: %3d",x, y);
SendMessageA(hStatus, SB_SETTEXTA, 2, (LPARAM)str);
}
或许使用更多的是进行提示,在状态栏中显示字符串与在标题栏(SetWindowText)显示字符串也没有太大的差别。