小弟目前正在学SDK编程,我现在建了一窗口(假设叫Menu),在Menu窗口里建了一个子窗口,类型为Static控件,
     问题一:当我的鼠标在这个控件上时(没有被按下),该发送什么消息给Menu窗口?如果被按下以后又发送什么消息?
     问题二:这个控件建好以后,怎样改变其显示的属性,比如现在无边框(此控件窗口没有WS_BORDER 风格),改为有编框,怎么做?
     问题三:怎样给这个控件创建一个ID号?     谁能帮我解答这些问题或是引导小弟学习,小弟不胜感激!!!

解决方案 »

  1.   

    >>问题一:当我的鼠标在这个控件上时(没有被按下),该发送什么消息给Menu窗口?如果被按下以后又发送什么消息?
        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!!!你只要在这里指定就可!
      

  2.   

    多谢:kingcom_xu(←对!它就是被封杀的kingcom!) 
       怎么进行子类化(subclass),能举个例子吗?
      

  3.   

    www.codeproject.com上有...
    如果你想系统的了解什么是子类化...超类化...还有什么是hook...建义你上jjhou.csdn.net去把那本叫Win95 程式设计指南-- Windows 95 A Developer's Guide的电子书下载下来慢慢看...http://jjhou.csdn.net/free-win95adg.htm    
      

  4.   

    我现在想把一个窗口(popup类型)上Static控件的点击消息送到父窗口的窗口过程里去处理阿;