win32sdk学习-创建一个状态栏

实际应用中,通常一个程序都有一个底部状态栏来显示一些信息,比如绘图软件,通常是在状态栏上显示鼠标位置。

我们使用CreateWindow来创建一个状态栏窗口,尽管其内部也是调用CreateWindowEX,但具体没有什么差别。

hwndStatus=CreateWindow(
		LPCTSTR lpClassName,
		LPCTSTR lpWindowName,
		DWORD dwStyle,
		int x,int y,
		int nWidth,int nHeight,
		HWND hWndParent,
		HMENU hMenu,
		HANDLE hInstance,
		PVOID lpParam
		)

LPCTSTR lpClassName 是一直字符串指针,指定创建的窗口类名,状态栏的窗口类名是STATUSCLASSNAME,

LPCTSTR lpWindowName,也是字符串指针,指定窗口名称,创建状态栏的话,这个可以为空。

DWORD dwStyle 执行窗口风格,作为子窗口控件,WS_CHILD | WS_VISIBLE 一定要有,多种风格用|符号链接。

int x,int y,int nWidth,int nHeight。指定窗口创建的坐标位置,状态栏可以使用0,0,0,0。只要样式中不包含CCS_NOPARENTALIGN或CCS_NORESIZE风格,状态栏就会自动调整大小。

HWND hWndParent,,指定一个父窗口句柄。

HMENU hMenu,菜单句柄,状态栏等子窗口也设置为NULL,

HANDLE hInstance, 模块实例句柄,WinMain函数传递过来的句柄。

PVOID lpParam  CREATESTRUCT结构,传递给WM_CREATE 消息的lParam参数,状态栏也可以设置为NULL。

 

//创建一个状态栏
    hwndStatus=CreateWindow(STATUSCLASSNAME,"",SBS_SIZEGRIP|WS_CHILD | WS_VISIBLE,
                            0,0,0,0,hwnd,NULL,hInst,NULL);
    //移动初始化状态栏
    moveStatus(hwnd);
    //设置状态栏分栏文本,WPARAM指定栏目
    SendMessage(hwndStatus, SB_SETTEXT, (WPARAM)0, (LPARAM)TEXT("就绪"));
    //使用格式化字符串来设置状态栏文本
    wsprintf(status_line,staformat,1,1);
    wsprintf(status_size,sizeformat,0);
    SendMessage(hwndStatus, SB_SETTEXT, (WPARAM)1, (LPARAM)status_line);
    SendMessage(hwndStatus, SB_SETTEXT, (WPARAM)2, (LPARAM)status_size);

执行状态栏分割几部分。

void moveStatus(HWND hwnd)
{
    RECT rcClient;
    int width[3];                       //状态栏分割数组
    GetClientRect(hwnd, &rcClient);     //获取父窗口矩形
    int length=rcClient.right/3;        //根据父窗口宽度来分割指定大小
    width[0]=length;                    //状态栏第一栏宽度,为分割长度length
    width[1]=length*2;                  //状态栏往后栏目宽度,为length*栏目标号
    width[2]=length*3;
    
    //根据width数组来设置状态栏
    SendMessage(hwndStatus, SB_SETPARTS, 3, (LPARAM)(LPINT)width);
    MoveWindow(hwndStatus,0,0,0,0,TRUE);
}

 

SendMessage(hwndStatus, SB_SETPARTS, 3, (LPARAM)(LPINT)width);

SB_SETPARTS消息用于来设置状态栏,第一个参数是状态栏句柄,第三个参数是用于讲状态栏分割几部分,这个3是分3栏显示。

(LPARAM)(LPINT)width ,width是一个int数组,里面元素保存了每个状态栏栏目的宽度。

等量把状态栏分三栏的话,第二栏为第一栏的2倍,同样,第三栏宽度为第一栏3倍。这个是状态栏宽度表示的方法。


SendMessage(hwndStatus, SB_SETTEXT, (WPARAM)0, (LPARAM)TEXT("就绪"));

 

SB_SETTEXT消息用于设置指定栏目的文本。WPARAM为栏目标号,从0开始。LPARAM表示字符串指针。

 

 

 

 

 

 

 

 

你可能感兴趣的:(null)