WndParentGraphProc.c

Go to the documentation of this file.
00001 /*-----------------------------------------------------------------------------------*/
00002 /* INRIA 2005 */
00003 /* Allan CORNET */
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 /* parent overlapped window */
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) /* Maximized case . F.leray 01.07.04 */
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         /* MAJ D.ABDEMOUCHE*/
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         /* set  ScilabGC->in_sizemove to zero if you want graphics 
00163         * redraw during resizing or to one to prevent redraw while sizing.
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         /* minimum size */
00173         /* same minimum size as Linux */
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 /*-----------------------------------------------------------------------------------*/

Generated on Sun Mar 4 15:03:55 2007 for Scilab [trunk] by  doxygen 1.5.1