00001
00002
00003
00004
00005 #include "WndParentGraphProc.h"
00006
00007 extern TW textwin;
00008 extern GW graphwin;
00009 extern HDC TryToGetDC(HWND hWnd);
00010 extern void DragFunc (LPTW lptw, HDROP hdrop);
00011
00012 BOOL ON_WND_PARENTGRAPH_WM_CLOSE(HWND hwnd);
00013 BOOL ON_WND_PARENTGRAPH_WM_DESTROY(HWND hwnd);
00014 BOOL ON_WND_PARENTGRAPH_WM_CREATE(HWND hwnd,LPCREATESTRUCT lpCreateStruct);
00015 BOOL ON_WND_PARENTGRAPH_WM_PAINT(HWND hwnd);
00016 BOOL ON_WND_PARENTGRAPH_WM_DROPFILES(HWND hwnd,HDROP hDrop);
00017 BOOL ON_WND_PARENTGRAPH_WM_COMMAND(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);
00018 BOOL ON_WND_PARENTGRAPH_WM_SIZE(HWND hwnd,UINT state,int cx,int cy);
00019 void ON_WND_PARENTGRAPH_WM_EXITSIZEMOVE(HWND hwnd);
00020 void ON_WND_PARENTGRAPH_WM_ENTERSIZEMOVE(HWND hwnd);
00021 BOOL ON_WND_PARENTGRAPH_WM_GETMINMAXINFO(HWND hwnd, LPMINMAXINFO lpMinMaxInfo);
00022 void ON_WND_PARENTGRAPH_WM_CHAR(HWND hwnd, TCHAR ch, int cRepeat);
00023 void ON_WND_PARENTGRAPH_WM_KEY(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags);
00024 BOOL ON_WND_PARENTGRAPH_WM_SETFOCUS(HWND hwnd, HWND hwndOldFocus);
00025 BOOL ON_WND_PARENTGRAPH_WM_SYSCOMMAND(HWND hwnd, WPARAM wParam, LPARAM lParam);
00026 void ON_WND_PARENTGRAPH_WM_KILLFOCUS(HWND hwnd, HWND hwndNewFocus);
00027
00028
00029 EXPORT LRESULT CALLBACK WndParentGraphProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
00030 {
00031 switch (message)
00032 {
00033 case WM_ENTERSIZEMOVE : ON_WND_PARENTGRAPH_WM_ENTERSIZEMOVE(hwnd); break;
00034 case WM_EXITSIZEMOVE : ON_WND_PARENTGRAPH_WM_EXITSIZEMOVE(hwnd); break;
00035 case WM_SYSCOMMAND : ON_WND_PARENTGRAPH_WM_SYSCOMMAND(hwnd,wParam,lParam); break;
00036
00037 HANDLE_MSG(hwnd,WM_SIZE,ON_WND_PARENTGRAPH_WM_SIZE);
00038 HANDLE_MSG(hwnd,WM_COMMAND,ON_WND_PARENTGRAPH_WM_COMMAND);
00039 HANDLE_MSG(hwnd,WM_DROPFILES,ON_WND_PARENTGRAPH_WM_DROPFILES);
00040 HANDLE_MSG(hwnd,WM_PAINT,ON_WND_PARENTGRAPH_WM_PAINT);
00041 HANDLE_MSG(hwnd,WM_CREATE,ON_WND_PARENTGRAPH_WM_CREATE);
00042 HANDLE_MSG(hwnd,WM_DESTROY,ON_WND_PARENTGRAPH_WM_DESTROY);
00043 HANDLE_MSG(hwnd,WM_CLOSE,ON_WND_PARENTGRAPH_WM_CLOSE);
00044 HANDLE_MSG(hwnd,WM_GETMINMAXINFO,ON_WND_PARENTGRAPH_WM_GETMINMAXINFO);
00045 HANDLE_MSG(hwnd,WM_CHAR,ON_WND_PARENTGRAPH_WM_CHAR);
00046 HANDLE_MSG(hwnd,WM_KEYDOWN,ON_WND_PARENTGRAPH_WM_KEY);
00047 HANDLE_MSG(hwnd,WM_SETFOCUS,ON_WND_PARENTGRAPH_WM_SETFOCUS);
00048 HANDLE_MSG(hwnd,WM_KILLFOCUS,ON_WND_PARENTGRAPH_WM_KILLFOCUS);
00049 }
00050 return DefWindowProc (hwnd, message, wParam, lParam);
00051 }
00052
00053 BOOL ON_WND_PARENTGRAPH_WM_CLOSE(HWND hwnd)
00054 {
00055 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00056 SendMessage (ScilabGC->CWindow, WM_CLOSE, 0, 0);
00057 return TRUE;
00058 }
00059
00060 BOOL ON_WND_PARENTGRAPH_WM_DESTROY(HWND hwnd)
00061 {
00062 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00063 SendMessage (ScilabGC->CWindow, WM_DESTROY, 0, 0);
00064 DragAcceptFiles (hwnd, FALSE);
00065 return TRUE;
00066 }
00067
00068 BOOL ON_WND_PARENTGRAPH_WM_CREATE(HWND hwnd,LPCREATESTRUCT lpCreateStruct)
00069 {
00070 struct BCG *ScilabGC = NULL;
00071 ScilabGC = lpCreateStruct->lpCreateParams;
00072 SetWindowLong (hwnd, 0, (LONG) ScilabGC);
00073 ScilabGC->hWndParent = hwnd;
00074 if (ScilabGC->lpgw->lptw) DragAcceptFiles (hwnd, TRUE);
00075 return TRUE;
00076 }
00077
00078 BOOL ON_WND_PARENTGRAPH_WM_PAINT(HWND hwnd)
00079 {
00080 PAINTSTRUCT ps;
00081 HDC hdc;
00082
00083 hdc = BeginPaint (hwnd, &ps);
00084 EndPaint (hwnd, &ps);
00085 return TRUE;
00086 }
00087
00088 BOOL ON_WND_PARENTGRAPH_WM_DROPFILES(HWND hwnd,HDROP hDrop)
00089 {
00090 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00091
00092 DragFunc (ScilabGC->lpgw->lptw, hDrop);
00093 return TRUE;
00094 }
00095
00096 BOOL ON_WND_PARENTGRAPH_WM_COMMAND(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
00097 {
00098 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00099 WPARAM wParam=id;
00100 LPARAM lParam=(LPARAM)hwndCtl;
00101
00102 if (IsWindow (ScilabGC->CWindow)) SetFocus (ScilabGC->CWindow);
00103 SendMessage (ScilabGC->CWindow, WM_COMMAND, wParam, lParam);
00104 return TRUE;
00105 }
00106
00107 BOOL ON_WND_PARENTGRAPH_WM_SIZE(HWND hwnd,UINT state,int cx,int cy)
00108 {
00109 RECT rect, rect1, rrect, rrect1;
00110 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00111
00112 GetWindowRect (ScilabGC->Statusbar, &rect);
00113 SetWindowPos (ScilabGC->Statusbar, (HWND) NULL, 0,cy - (rect.bottom - rect.top),
00114 cx, (rect.bottom - rect.top),
00115 SWP_NOZORDER | SWP_NOACTIVATE);
00116
00117 switch (state)
00118 {
00119 case SIZE_MAXIMIZED:
00120 GetWindowRect (ScilabGC->Statusbar, &rrect1);
00121 GetClientRect (ScilabGC->hWndParent, &rrect);
00122 ScilabGC->CWindowWidthView = rrect.right;
00123 ScilabGC->CWindowHeightView = rrect.bottom - (rrect1.bottom - rrect1.top);
00124 if (ScilabGC->CurResizeStatus != 0)
00125 {
00126 ScilabGC->CWindowWidth = ScilabGC->CWindowWidthView;
00127 ScilabGC->CWindowHeight = ScilabGC->CWindowHeightView;
00128 }
00129 break;
00130
00131 default:
00132 break;
00133 }
00134
00135 SetWindowPos (ScilabGC->CWindow, (HWND) NULL, 0,0,
00136 cx,cy - (rect.bottom - rect.top),
00137 SWP_NOZORDER | SWP_NOACTIVATE);
00138
00139 GetWindowRect (ScilabGC->Statusbar, &rect1);
00140 GetClientRect (ScilabGC->hWndParent, &rect);
00141 ScilabGC->CWindowWidthView = rect.right;
00142 ScilabGC->CWindowHeightView = rect.bottom - (rect1.bottom - rect1.top);
00143
00144 if (ScilabGC->CurResizeStatus != 0)
00145 {
00146 ScilabGC->CWindowWidth = ScilabGC->CWindowWidthView;
00147 ScilabGC->CWindowHeight = ScilabGC->CWindowHeightView;
00148 }
00149 return TRUE;
00150 }
00151
00152 void ON_WND_PARENTGRAPH_WM_EXITSIZEMOVE(HWND hwnd)
00153 {
00154 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00155 ScilabGC->in_sizemove=0;
00156 InvalidateRect (ScilabGC->CWindow, (LPRECT) NULL, FALSE);
00157 }
00158
00159 void ON_WND_PARENTGRAPH_WM_ENTERSIZEMOVE(HWND hwnd)
00160 {
00161 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00162
00163
00164
00165
00166 ScilabGC->in_sizemove=0;
00167 }
00168
00169 BOOL ON_WND_PARENTGRAPH_WM_GETMINMAXINFO(HWND hwnd, LPMINMAXINFO lpMinMaxInfo)
00170 {
00171 POINT *MMinfo = (POINT *) lpMinMaxInfo;
00172
00173
00174 MMinfo[3].x = 400;
00175 MMinfo[3].y =320;
00176
00177 return TRUE;
00178 }
00179
00180 void ON_WND_PARENTGRAPH_WM_CHAR(HWND hwnd, TCHAR ch, int cRepeat)
00181 {
00182 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00183 SendMessage (ScilabGC->CWindow, WM_CHAR, ch, MAKELPARAM((cRepeat),0));
00184 }
00185
00186 void ON_WND_PARENTGRAPH_WM_KEY(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags)
00187 {
00188 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00189
00190 if ( fDown) SendMessage (ScilabGC->CWindow, WM_KEYDOWN,(WPARAM)(UINT)(vk), MAKELPARAM((cRepeat), (flags)));
00191 else SendMessage (ScilabGC->CWindow, WM_KEYUP,(WPARAM)(UINT)(vk), MAKELPARAM((cRepeat), (flags)));
00192 }
00193
00194 BOOL ON_WND_PARENTGRAPH_WM_SETFOCUS(HWND hwnd, HWND hwndOldFocus)
00195 {
00196 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00197 SetFocus (ScilabGC->CWindow);
00198
00199 return TRUE;
00200 }
00201
00202 BOOL ON_WND_PARENTGRAPH_WM_SYSCOMMAND(HWND hwnd, WPARAM wParam, LPARAM lParam)
00203 {
00204 switch (LOWORD (wParam))
00205 {
00206 case M_COPY_CLIP:
00207 case M_PASTE:
00208 case M_WRITEINI:
00209 case M_ABOUT:
00210 {
00211 struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00212 SendMessage (ScilabGC->CWindow, WM_COMMAND,wParam, lParam);
00213 }
00214 break;
00215 }
00216 return TRUE;
00217 }
00218
00219 void ON_WND_PARENTGRAPH_WM_KILLFOCUS(HWND hwnd, HWND hwndNewFocus)
00220 {
00221 SendMessage (textwin.hWndText, WM_KILLFOCUS, (WPARAM)(HWND)(hwndNewFocus), 0L);
00222 }
00223