# 工具栏和状态栏的使用

**URL:** <https://perak.org/t/%E5%B7%A5%E5%85%B7%E6%A0%8F%E5%92%8C%E7%8A%B6%E6%80%81%E6%A0%8F%E7%9A%84%E4%BD%BF%E7%94%A8/60122>\
**Category:** 程序设计\
**Created:** [2006 年8 月 17 日 14:25 UTC](https://perak.org/t/%E5%B7%A5%E5%85%B7%E6%A0%8F%E5%92%8C%E7%8A%B6%E6%80%81%E6%A0%8F%E7%9A%84%E4%BD%BF%E7%94%A8/60122 "2006-08-17T14:25:06Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

作者： ![microsys](https://perak.org/letter_avatar_proxy/v4/letter/m/d26b3c/32.png) [@microsys](https://perak.org/u/microsys)\
发布日期： [2006 年8 月 17 日 14:25 UTC](https://perak.org/t/%E5%B7%A5%E5%85%B7%E6%A0%8F%E5%92%8C%E7%8A%B6%E6%80%81%E6%A0%8F%E7%9A%84%E4%BD%BF%E7%94%A8/60122/1 "2006-08-17T14:25:06Z")

</div>

有关工具栏和状态栏

工具栏和状态栏也是Windows标准界面的组成部分，工具栏一般位于菜单栏的下方，上面是一些系统定义的或自己定义的图片，可以通俗地显示这个按钮的作用。状态栏一般位于窗口的最下方，用来显示程序运行中的一些信息。工具栏和状态栏是Windows系统的两个通用的控件，你可以通过两个专用的 API 或者利用 CreateWindowEx 再使用制定的已经由系统定义的类来创建它们。这两个 API 分别是 CreateToolbarEx 和 CreateStatusWindow。下面将一下它们的用法。  
CreateToolbarEx 的声明为：

HWND CreateToolbarEx(

HWND hwnd,  
DWORD ws,  
UINT wID,  
int nBitmaps,  
HINSTANCE hBMInst,  
UINT wBMID,  
LPCTBBUTTON lpButtons,  
int iNumButtons,  
int dxButton,  
int dyButton,  
int dxBitmap,  
int dyBitmap,  
UINT uStructSize}

它的参数中 hwnd 是父窗口（也就是我们的主窗口）的句柄，ws 是工具栏的风格，可以由几项合成，如 WS\_VISIBLE 是创建是可见，TBSTYLE\_FLAT表示平面按钮，WS\_BORDER表示有边线等，具体可以见手册。wID 是工具栏的标识，nBitmaps 是定义按钮的图片个数，因为如果你要使用自己的图片，所有图片是要放在同一行中的，然后就由你自己指定中间的个数， hBMInst 是包含已定义系统图片的资源句柄，在你不想自己画图，使用内定的标准图片时使用，一般包含这些图片的 hInstance 已经在 Widnows.inc 中定义为 HINST\_COMMCTRL，同样 wBMID 一般是 IDB\_STD\_SMALL\_COLOR，表示使用大图片还是小图片等等。接下来是定义按钮的数据结构，中间定义了各个按钮的命令号，图片号及其他属性，结构如下：

TBBUTTON STRUCT  
iBitmap DWORD ?  
idCommand DWORD ?  
fsState BYTE ?  
fsStyle BYTE ?  
bReserved BYTE 2 dup(?)  
dwData DWORD ?  
iString DWORD ?  
TBBUTTON ENDS  
其中，每个结构定义一个按钮，数据结构中iBitmap 是图片ID，idCommand 是按钮的命令号，这个命令号当你按下按钮的时候会出现在 WM\_COMMAND 消息的 wParam 中，你就可以知道哪个按钮被按下了。fsState 是按钮的初始状态，如 TBSTATE\_PRESSED 是已经按下的，详细见手册，fsStyle 是风格。  
而建立状态栏的 CreateStatusWindow 的声明如下：

HWND CreateStatusWindow(

LONG style,  
LPCTSTR lpszText,  
HWND hwndParent,  
UINT wID  
);  
style 是状态栏的风格，lpszText 指向初始化是要显示在状态栏的文本，你可以指向 NULL。hwndParent 是父窗口的句柄。wID 是窗口 ID。

使用工具栏和状态栏的源程序

;\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>  
; 是否包括调试代码  
;\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>  
DEBUG = 1  
;\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>  
; Programmed by 罗云彬, [bigluo@telekbird.com.cn](mailto:bigluo@telekbird.com.cn)  
; Website: [http://asm.yeah.net](http://asm.yeah.net)  
; LuoYunBin’s Win32 ASM page (罗云彬的编程乐园)  
;\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>  
; 版本信息  
; 工具栏和状态栏演示程序 Ver 1.0  
;\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>

.386  
.model flat, stdcall  
option casemap :none ; case sensitive

;\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>  
; Include 数据  
;\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>

include windows.inc  
include user32.inc  
include kernel32.inc  
include comctl32.inc  
include comdlg32.inc  
include gdi32.inc

includelib user32.lib  
includelib kernel32.lib  
includelib comctl32.lib  
includelib comdlg32.lib  
includelib gdi32.lib

;\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>  
; Equ 数据  
;\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>

IDI\_MAIN equ 1000 ;icon

IDM\_MAIN equ 4000 ;menu  
IDM\_TOOLBAR equ 4001  
IDM\_STATUSBAR equ 4002  
IDM\_EXIT equ 4003  
;\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>  
; 数据段  
;\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>

.data?

hInstance dd ?  
hWinMain dd ?  
hMenu dd ?  
hIcon dd ?  
hToolbar dd ?  
hStatusbar dd ?

szBuffer db 256 dup (?)

;\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>  
; 数据段  
;\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>

.data

szClassName db “Toolbar Template”,0  
szCaptionMain db ‘工具栏和状态栏演示程序 - 罗云彬’,0  
dwFlag dd F\_TOOLBAR or F\_STATUSBAR  
;\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
; 标志位定义  
F\_TOOLBAR equ 00000001b  
F\_STATUSBAR equ 00000010b  
stToolbar TBBUTTON \< STD\_FILENEW,1,TBSTATE\_ENABLED,TBSTYLE\_BUTTON,2 dup(0),-1\>  
TBBUTTON \<0,0,TBSTATE\_ENABLED,TBSTYLE\_SEP,2 dup(0),-1\>  
TBBUTTON \< STD\_FILEOPEN,2,TBSTATE\_ENABLED,TBSTYLE\_BUTTON,2 dup(0),-1\>  
TBBUTTON \< STD\_FILESAVE,3,TBSTATE\_ENABLED,TBSTYLE\_BUTTON,2 dup(0),-1\>  
TBBUTTON \<0,0,TBSTATE\_ENABLED,TBSTYLE\_SEP,2 dup(0),-1\>  
TBBUTTON \< STD\_PRINT,4,TBSTATE\_ENABLED,TBSTYLE\_BUTTON,2 dup(0),-1\>  
TBBUTTON \< STD\_PRINTPRE,0,TBSTATE\_ENABLED,TBSTYLE\_SEP,2 dup(0),-1\>  
NUM\_BUTTONS EQU 7

;\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>  
; 代码段  
;\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>

.code

if DEBUG  
include Debug.asm  
endif

;\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>  
; 程序开始  
;\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>  
start:  
call \_WinMain  
invoke ExitProcess,NULL

;\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>  
; 主窗口程序  
;\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>  
\_WinMain proc  
local @stWcMain:WNDCLASSEX  
local @stMsg:MSG

;\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
; 如果已经在运行，则激活已运行的进程  
;\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
invoke FindWindow,offset szClassName,NULL  
.if eax != NULL  
invoke ShowWindow,eax,SW\_SHOWNORMAL  
invoke ExitProcess,NULL  
.endif

invoke InitCommonControls  
invoke GetModuleHandle,NULL  
mov hInstance,eax  
invoke LoadIcon,hInstance,IDI\_MAIN  
mov hIcon,eax  
invoke LoadMenu,hInstance,IDM\_MAIN  
mov hMenu,eax  
;\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 注册窗口类 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
invoke LoadCursor,0,IDC\_ARROW  
mov @stWcMain.hCursor,eax  
mov @stWcMain.cbSize,sizeof WNDCLASSEX  
mov @stWcMain.hIconSm,0  
mov @stWcMain.style,CS\_HREDRAW or CS\_VREDRAW  
mov @stWcMain.lpfnWndProc,offset WndMainProc  
mov @stWcMain.cbClsExtra,0  
mov @stWcMain.cbWndExtra,0  
mov eax,hInstance  
mov @stWcMain.hInstance,eax  
mov @stWcMain.hIcon,0  
mov @stWcMain.hbrBackground,COLOR\_BTNFACE+1  
mov @stWcMain.lpszClassName,offset szClassName  
mov @stWcMain.lpszMenuName,0  
invoke RegisterClassEx,addr @stWcMain  
;\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 建立输出窗口 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
invoke CreateWindowEx,NULL,\ ;WS\_EX\_CLIENTEDGE,  
offset szClassName,offset szCaptionMain,  
WS\_OVERLAPPEDWINDOW,\ ; OR WS\_VSCROLL OR WS\_HSCROLL,  
50,50,550,350,  
NULL,hMenu,hInstance,NULL

invoke ShowWindow,hWinMain,SW\_SHOWNORMAL  
invoke UpdateWindow,hWinMain  
;\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 消息循环 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
.while TRUE  
invoke GetMessage,addr @stMsg,NULL,0,0  
.break .if eax == 0  
invoke TranslateMessage,addr @stMsg  
invoke DispatchMessage,addr @stMsg  
.endw  
ret

\_WinMain endp  
;\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>  
WndMainProc proc uses ebx edi esi,   
hWnd:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD

mov eax,uMsg  
.if eax == WM\_CREATE  
mov eax,hWnd  
mov hWinMain,eax  
call \_Init  
;\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
.elseif eax == WM\_SIZE  
invoke SendMessage,hStatusbar,uMsg,wParam,lParam  
invoke SendMessage,hToolbar,uMsg,wParam,lParam  
;\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
.elseif eax == WM\_COMMAND  
mov eax,wParam  
movzx eax,ax  
.if eax == IDM\_EXIT  
call \_Quit  
.elseif eax == IDM\_TOOLBAR  
xor dwFlag,F\_TOOLBAR  
call \_ArrangeWindow  
.elseif eax == IDM\_STATUSBAR  
xor dwFlag,F\_STATUSBAR  
call \_ArrangeWindow  
.else  
\_Debug “菜单和工具栏命令”,“命令ID”,eax  
.endif  
;\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
.elseif eax == WM\_CLOSE  
call \_Quit  
;\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
.else  
invoke DefWindowProc,hWnd,uMsg,wParam,lParam  
ret  
.endif  
;\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
; 注意：WndProc 处理 Windows 消息后，必须在 Eax 中返回 0  
; 但是由 DefWindowProc 处理后的返回值不能改变，否则窗口  
; 将无法显示!  
;\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
xor eax,eax  
ret

WndMainProc endp

;\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>  
; 主窗口控制子程序  
;\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>\>  
\_Init proc

invoke SendMessage,hWinMain,WM\_SETICON,ICON\_SMALL,hIcon  
invoke CreateToolbarEx,hWinMain,  
WS\_VISIBLE or WS\_CHILD or TBSTYLE\_FLAT or WS\_BORDER,  
1,0,HINST\_COMMCTRL,IDB\_STD\_SMALL\_COLOR,offset stToolbar,  
NUM\_BUTTONS,0,0,0,0,sizeof TBBUTTON  
mov hToolbar,eax

invoke CreateStatusWindow,WS\_CHILD or WS\_VISIBLE,NULL,hWinMain,2  
mov hStatusbar,eax  
call \_ArrangeWindow

ret

\_Init endp  
;\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
\_Quit proc

invoke DestroyWindow,hWinMain  
invoke PostQuitMessage,NULL  
ret

\_Quit endp  
;\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
\_ArrangeWindow proc  
local @stRect:RECT  
local @stRectTemp:RECT  
local @dwWidth:DWORD

test dwFlag,F\_TOOLBAR  
.if ZERO?  
invoke ShowWindow,hToolbar,SW\_HIDE  
invoke CheckMenuItem,hMenu,IDM\_TOOLBAR,MF\_UNCHECKED  
.else  
invoke ShowWindow,hToolbar,SW\_SHOW  
invoke CheckMenuItem,hMenu,IDM\_TOOLBAR,MF\_CHECKED  
.endif  
test dwFlag,F\_STATUSBAR  
.if ZERO?  
invoke ShowWindow,hStatusbar,SW\_HIDE  
invoke CheckMenuItem,hMenu,IDM\_STATUSBAR,MF\_UNCHECKED  
.else  
invoke ShowWindow,hStatusbar,SW\_SHOW  
invoke CheckMenuItem,hMenu,IDM\_STATUSBAR,MF\_CHECKED  
.endif

ret

\_ArrangeWindow endp  
;\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
end start

程序的分析和要点

在工具栏和状态栏编程中，要注意的就是工具栏和状态栏并不会随父窗口的大小变化自己调整位置和大小，所以要在父窗口的 WM\_SIZE 消息中来移动和调整它们，这可以简单的把 WM\_SIZE 消息传给它们就行了。不必自己再去计算。

.elseif eax == WM\_SIZE  
invoke SendMessage,hStatusbar,uMsg,wParam,lParam  
invoke SendMessage,hToolbar,uMsg,wParam,lParam  
另外，工具栏和状态栏也是一种子窗口，所以如果想把它们隐藏或显示的话，可以用标准的 ShowWindow 来处理。

---

<div class="post-metadata">

作者： ![红文](https://perak.org/letter_avatar_proxy/v4/letter/%E7%BA%A2/54ee81/32.png) [@红文](https://perak.org/u/%E7%BA%A2%E6%96%87)\
发布日期： [2006 年8 月 17 日 14:32 UTC](https://perak.org/t/%E5%B7%A5%E5%85%B7%E6%A0%8F%E5%92%8C%E7%8A%B6%E6%80%81%E6%A0%8F%E7%9A%84%E4%BD%BF%E7%94%A8/60122/2 "2006-08-17T14:32:14Z")

</div>

说实话,从开始我就没咋看懂,但还是要说加油

---

<div class="post-metadata">

作者： ![microsys](https://perak.org/letter_avatar_proxy/v4/letter/m/d26b3c/32.png) [@microsys](https://perak.org/u/microsys)\
发布日期： [2006 年8 月 17 日 14:33 UTC](https://perak.org/t/%E5%B7%A5%E5%85%B7%E6%A0%8F%E5%92%8C%E7%8A%B6%E6%80%81%E6%A0%8F%E7%9A%84%E4%BD%BF%E7%94%A8/60122/3 "2006-08-17T14:33:23Z")

</div>

> 引用第1楼红文于2006-08-17 10:32 PM发表的“”:  
> 说实话,从开始我就没咋看懂,但还是要说加油

谢谢你的确鼓励.
