win32 sdk 环境下创建状态栏
今天在学习状态栏,出了好多的问题,这里记录下.
要创建状态栏用:CreateStatusWindow
CreateStatusWindow函数创建一个状态窗口,通常用于显示应用程序的状态。窗口通常显示在父窗口的底部,它包含指定的文本。
HWND CreateStatusWindow(
LONG, //状态栏样式
LPCTSTR, //第一格要显示的字符串指针
HWND, //父窗口句柄
UINT); //状态窗口的控制标识符
参数
【样式】
状态窗口的窗口样式。此参数必须包含WS_CHILD样式,并且还应包含WS_VISIBLE样式。
【lpszText】
指向指定第一个部分的状态文本的以空值终止的字符串的指针。
【hwndParent】
处理到父窗口。
【wID】
状态窗口的控制标识符。窗口过程使用此值来标识发送到父窗口的消息。
返回值
如果函数成功,则返回值是状态窗口的句柄。
如果函数失败,返回值为NULL。
备注
CreateStatusWindow函数调用CreateWindow函数创建窗口。它将参数传递给CreateWindow而不进行修改,并将position,width和height参数设置为默认值。
所以也可以用CreateWindow来创建,这个以后再说.
//我这是创建的全局状态栏句柄HWND hWndStatus
//还要自己定义一个状态栏的ID号
#define IDC_STATUS1 10001
在OnInitDialog()函数中添加:
hWndStatus = ::CreateStatusWindow(WS_CHILD | WS_VISIBLE | SBS_SIZEGRIP, NULL, m_hWnd, IDC_STATUS1); //创建状态栏
RECT rect; GetClientRect(m_hWnd, &rect); //获得窗口的尺寸 int nWith = rect.right / 6; //把窗口分成六份
//这是每格的宽度,搞不明白为啥子是这个样子,头有点大,你说是x坐标值也不对,
//我这是分成三个格子,第一个格子点了4份,所以*了个4,后面二个都是占一份,
//如果是最后一格填满剩余的空间就把最后一个写成-1,数组格式就是:
//int nWiths[3]={nWitch,nWitch*2,-1};
int nWiths[3] = { nWith * 4,nWith * 5,nWith * 6 }; ::SendMessage(hWndStatus, SB_SETPARTS, 3, (LPARAM)(long)nWiths); ::MoveWindow(hWndStatus, 0, 0, 0, 0, TRUE);
基本上就是这个样子了
一片空白,没有也东西呢.
//写到状态中相应的格子中,WPARAM参数就是格式的索引值
::SendMessage(hWndStatus, SB_SETTEXT, 0, (long)TEXT("准备就绪"));
::SendMessage(hWndStatus, SB_SETTEXT, 1, (long)TEXT("系统时间"));
::SendMessage(hWndStatus, SB_SETTEXT, 2, (long)TEXT("系统时间2"));
最后在窗体WM_SIZE消息中通知状态栏自己适应窗体大小,
RECT rect; GetClientRect(m_hWnd, &rect); int nWith = rect.right / 6; int sWiths[3] = { nWith * 4 ,nWith * 5,nWith * 6 }; ::SendMessage(hWndStatus, SB_SETPARTS, 3, (LPARAM)(long)sWiths); ::MoveWindow(hWndStatus, 0, 0, 0, 0, TRUE);
差不多就是这样了,其他的以后再研究吧