OSDN Git Service

window.hpp, control.hpp: メッセージコールバック実装。ウインドウ出てくるようになったー!!!
authorMyun2 <myun2@nwhite.info>
Sun, 20 Mar 2011 04:42:52 +0000 (13:42 +0900)
committerMyun2 <myun2@nwhite.info>
Sun, 20 Mar 2011 04:42:52 +0000 (13:42 +0900)
roast_ex/include/roast/windows/control.hpp
roast_ex/include/roast/windows/window.hpp

index 522c3e9..24c044b 100644 (file)
@@ -208,6 +208,8 @@ namespace roast
                        void regist_in_hwnd(HWND hWnd){ m_hwnd2this_map[hWnd] = this; }
 
                protected:
+                       //HWND m_hWnd;
+
                        static const int sizing_hold_bit_left = 1;
                        static const int sizing_hold_bit_top = 2;
                        static const int sizing_hold_bit_right = 4;
@@ -225,17 +227,15 @@ namespace roast
                        virtual void on_sizing(unsigned int hold_bitflg){}
 
                private:
-                       HWND m_hWnd;
-
                        LRESULT callback_main(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
                        {
-                               m_hWnd = hWnd;
+                               //m_hWnd = hWnd;
 
                                switch( msg )
                                {
                                case WM_CLOSE:  
                                        if ( on_close() )
-                                               ::DestroyWindow(m_hWnd);
+                                               ::DestroyWindow(hWnd);
                                        return 0;
 
                                case WM_CREATE: 
@@ -282,24 +282,25 @@ namespace roast
                                }
 
                                return ::DefWindowProc( hWnd, msg, wParam, lParam );
-                       };
+                       }
+
+               public:
+                       template <typename T>
+                       static LRESULT CALLBACK message_callback_static(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
+                       {
+                               ::std::map<HWND, message_callback_base*>::iterator it = m_hwnd2this_map.find(hWnd);
+                               if ( it == m_hwnd2this_map.end() )
+                                       return ::DefWindowProc( hWnd, msg, wParam, lParam );
+                               else
+                                       return it->second->callback_main(hWnd, msg, wParam, lParam);
+                       }
                };
 
                ::std::map<HWND, message_callback_base*> message_callback_base::m_hwnd2this_map;
 
-               template <typename T>
-               LRESULT CALLBACK message_callback_func(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
-               {
-                       ::std::map<HWND, message_callback_base*>::iterator it = message_callback_base::m_hwnd2this_map.find(hWnd);
-                       if ( it == message_callback_base::m_hwnd2this_map.end() )
-                               return ::DefWindowProc( hWnd, msg, wParam, lParam );
-                       else
-                               return it->second->callback_main(hWnd, msg, wParam, lParam);
-               }
-
                /////////////////////////////////////////////////////////////////////////////////////////
                
-               class user_class_control : public control
+               class user_class_control : public control, public message_callback_base
                {
                public:
                        user_class_control(lpctstr_t szWindowClassName) : control(szWindowClassName) {}
index 8d0e630..0be3967 100644 (file)
@@ -23,6 +23,10 @@ namespace roast
 
                        window_detail_info(){
                                memset(this, 0, sizeof(window_detail_info));
+
+                               //hIcon = LoadIcon(NULL,IDI_APPLICATION);
+                               hCursor = LoadCursor(NULL,IDC_ARROW);
+                               hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
                        }
                        
                        void set_icon(HICON hIcon, HICON hSmallIcon=NULL){
@@ -61,7 +65,7 @@ namespace roast
                                HMENU hMenu=NULL          // \83\81\83j\83\85\81[\83n\83\93\83h\83\8b\82Ü\82½\82Í\8eq\83E\83B\83\93\83h\83E ID
                        )
                        {
-                               window_class wc(m_szClassName, hInstance, message_callback_func<window>, CS_CLASSDC);
+                               window_class wc(m_szClassName, hInstance, &message_callback_base::message_callback_static<window>, CS_CLASSDC);
                                wc.set_icon(detail.hIcon, detail.hSmallIcon);
                                wc.set_cursor(detail.hCursor);
                                wc.set_background_brush(detail.hbrBackground);
@@ -71,7 +75,13 @@ namespace roast
                                        throw windows_control_exception("Regist Window Class Failed.");
                                        //return false;
 
-                               return custom_control::start(hInstance,hWndParent,x,y,nWidth,nHeight,lpControlText,dwStyle,hMenu);
+                               bool ret = custom_control::start(hInstance,hWndParent,x,y,nWidth,nHeight,lpControlText,dwStyle,hMenu);
+                               if ( !ret )
+                                       return false;
+
+                               message_callback_base::regist_in_hwnd(m_hWnd);
+                               
+                               return ret;
                        }
                };