小弟目前正在学SDK编程,我现在建了一窗口(假设叫Menu),在Menu窗口里建了一个子窗口,类型为Static控件,
问题一:当我的鼠标在这个控件上时(没有被按下),该发送什么消息给Menu窗口?如果被按下以后又发送什么消息?
问题二:这个控件建好以后,怎样改变其显示的属性,比如现在无边框(此控件窗口没有WS_BORDER 风格),改为有编框,怎么做?
问题三:怎样给这个控件创建一个ID号? 谁能帮我解答这些问题或是引导小弟学习,小弟不胜感激!!!
问题一:当我的鼠标在这个控件上时(没有被按下),该发送什么消息给Menu窗口?如果被按下以后又发送什么消息?
问题二:这个控件建好以后,怎样改变其显示的属性,比如现在无边框(此控件窗口没有WS_BORDER 风格),改为有编框,怎么做?
问题三:怎样给这个控件创建一个ID号? 谁能帮我解答这些问题或是引导小弟学习,小弟不胜感激!!!
static默认是不会发消息给父窗口的...得在创建的时候给它加上SS_NOTIFY风格...鼠标在这个控件上时会发出WM_MOUSEMOVE消息...但不是发给父窗口...而是发给static自己的窗口函数...如果你要对其进行处理必须对static进行subclass(子类化)...被按下以后会发出WM_LBUTTONDOWN...被按下之后再松开会发出WM_LBUTTONUP(这两个消息同样也不会发给父窗口)...之后会向父窗口发出STN_CLICKED...这时你就可以在你的窗口函数里进行处理了!
>>问题二:这个控件建好以后,怎样改变其显示的属性,比如现在无边框(此控件窗口没有WS_BORDER 风格),改为有编框,怎么做?
这个可以用GetWindowLong和SetWindowLong来解决...
示例如下:LONG style=GetWindowLong(YouStaticHwnd,GWL_STYLE);
style|=WS_BORDER;
SetWindowLong(YouStaticHwnd,GWL_STYLE,style);>>问题三:怎样给这个控件创建一个ID号?
HWND CreateWindow(
LPCTSTR lpClassName, // registered class name
LPCTSTR lpWindowName, // window name
DWORD dwStyle, // window style
int x, // horizontal position of window
int y, // vertical position of window
int nWidth, // window width
int nHeight, // window height
HWND hWndParent, // handle to parent or owner window
HMENU hMenu, // menu handle or child identifier
HINSTANCE hInstance, // handle to application instance
LPVOID lpParam // window-creation data
);注意hMenu这个参数!创建普通窗口的话它是一个菜单的句柄,而创建像static这样的子窗口它是一个ID!!!你只要在这里指定就可!
怎么进行子类化(subclass),能举个例子吗?
如果你想系统的了解什么是子类化...超类化...还有什么是hook...建义你上jjhou.csdn.net去把那本叫Win95 程式设计指南-- Windows 95 A Developer's Guide的电子书下载下来慢慢看...http://jjhou.csdn.net/free-win95adg.htm