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;
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:
}
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) {}
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){
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);
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;
}
};