继续之前的
子窗口
其中,子窗口上显示的文本是可以在父窗口里面通过窗口句柄进行调用
SetWindowText(hWnd,string)
修改的
同样,在CreateWindow函数中,我们发现,有个WS_VISIBLE这个关键字,故名,这个关键字可以让这个窗口在创建之初就显示出来,所以就没有必要再为子窗口调用ShowWindow这个函数,当然,你可以通过ShwoWindow(hWnd,SW_HIDE)
来将其隐藏起来,还有几个相关的:
IsWindowVisible(hWnd)
来确定这个窗口是否可见
EnableWindow(hWnd,TRUE(FLASE))
来使窗口启用(不启用)
IsWindowEnabled(hWnd)
来确定是否被启用
对于消息WM_SETFOCUS和WM_KILLFOCUS这两个消息,作用在之前都有提到,但是这里要对其做一个补充:wParam参数的值使接受失去(即那个获取WM_KILLFOCUS的窗口)的句柄,KILLFOCUS反之,当然这个值也可能是NULL
再提个关于绘图的消息:WM_CTLCOLORBTN,wParam是按钮的HDC,lParam是按钮的hWnd
_BS_OWNERDRAW这种风格的按钮会在WM_BUTTONDOWN,WM_BUTTONUP这两个消息时分别发送一个WM_DRAWITEM消息,或是WM_SETFOCUS,WM_KILLFOCUS,还有被创建或者是需要重新着色的任何时候
其中:lParam是一个指向DRAWITEMSTRUCT结构的指针,这个结构包含了画这个按钮是所必须的消息,比如HDC,长宽等
静态类
就是再CreateWinodw里面的第一个参数的名字改为TEXT(“static”)这样穿件出来的窗口控制就是静态的,这个窗口控制不接受鼠标或键盘的输入,同时不向父窗口发出WM_COMMAND消息,但是当在静态窗口上摁下或移动鼠标,这个窗口就会捕获WM_NCHITTEST消息,这个消息的返回值返回给Windows然后Windows会向下层窗口发送小童的WM_NCHITTEST消息。
滚动条类
这个滚动条和之前的滚动条不一样,但是依然可以同SetScrollPos,SetScrollInfo,SetScrollRange这三个函数来控制,在处理滚动条的时候,可以通过IParam参数来分开窗口滚动条和滚动条控制,对于窗口来说这个值是0对于控制来说这个值是滚动条的hWnd,并且这个滚动条窗口并不会向父窗口发送WM_COMMAND消息。
在书上的例程中我注意到了:
int idFocus ;
(全局)
OldScroll[i] = (WNDPROC) SetWindowLong (hwndScroll[i],
GWL_WNDPROC, (LONG) ScrollProc) ;
case WM_SETFOCUS :
case WM_SETFOCUS :
SetFocus (hwndScroll[idFocus]) ;
return 0 ;
LRESULT CALLBACK ScrollProc (HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam);
case WM_SETFOCUS :
idFocus = id ;
break ;
把这里分成两个部分,一个部分就是SETFOCUS另一个部分则是SetWindowLong
第一部分我们发现,当主窗口获取到输入焦点时,就会把输入焦点返还给之前拥有属于焦点的那一窗口控制中
第二部分则是在程序创建之后,我们没有仅仅使用默认的窗口过程,而是自己又新建了一个窗口过程来对其所缺少的功能进行补充
以上第一个就是一个自动键盘接口,这个可以解决输入焦点的问题
第二个就是一个窗口子类化的方法