00001 #ifndef _DIALOG_RESIZE_HELPER_H_
00002 #define _DIALOG_RESIZE_HELPER_H_
00003
00004
00005
00006 namespace resize
00007 {
00008 void calc_xy(HWND wnd,UINT id,RECT &r,RECT & o);
00009 void calc_move_xy(HWND wnd,UINT id,RECT &r,RECT & o);
00010 void calc_move_x(HWND wnd,UINT id,RECT &r,RECT & o);
00011 void calc_move_x_size_y(HWND wnd,UINT id,RECT &r,RECT & o);
00012 void calc_move_y(HWND wnd,UINT id,RECT &r,RECT & o);
00013 void calc_x(HWND wnd,UINT id,RECT &r,RECT & o);
00014 };
00015
00016 void GetChildRect(HWND wnd,UINT id,RECT* child);
00017
00018
00019 class dialog_resize_helper
00020 {
00021 pfc::array_t<RECT> rects;
00022 RECT orig_client;
00023 HWND parent;
00024 HWND sizegrip;
00025 unsigned min_x,min_y,max_x,max_y;
00026
00027 public:
00028 struct param {
00029 unsigned short id;
00030 unsigned short flags;
00031 };
00032 private:
00033 pfc::array_t<param> m_table;
00034
00035 void set_parent(HWND wnd);
00036 void add_item(UINT id,UINT flags);
00037 void reset();
00038 void on_wm_size();
00039 void add_items(const param* table,unsigned count);
00040 public:
00041 inline void set_min_size(unsigned x,unsigned y) {min_x = x; min_y = y;}
00042 inline void set_max_size(unsigned x,unsigned y) {max_x = x; max_y = y;}
00043 void add_sizegrip();
00044
00045 enum {
00046 X_MOVE = 1, X_SIZE = 2, Y_MOVE = 4, Y_SIZE = 8,
00047 XY_MOVE = X_MOVE|Y_MOVE, XY_SIZE = X_SIZE|Y_SIZE,
00048 X_MOVE_Y_SIZE = X_MOVE|Y_SIZE, X_SIZE_Y_MOVE = X_SIZE|Y_MOVE,
00049 };
00050 bool process_message(HWND wnd,UINT msg,WPARAM wp,LPARAM lp);
00051
00052
00053
00054 explicit dialog_resize_helper(const param * src,unsigned count,unsigned p_min_x,unsigned p_min_y,unsigned p_max_x,unsigned p_max_y);
00055 ~dialog_resize_helper();
00056 };
00057
00058 #endif