WndConsoleParentProc.c

Go to the documentation of this file.
00001 /*-----------------------------------------------------------------------------------*/
00002 /* INRIA 2005 */
00003 /* Allan CORNET */
00004 /*-----------------------------------------------------------------------------------*/
00005 #include "WndConsoleParentProc.h"
00006 #include "wtext.h"
00007 /*-----------------------------------------------------------------------------------*/
00008 extern LPTW GetTextWinScilab(void);
00009 extern char *GetScilabDirectory(BOOL UnixStyle);
00010 extern BOOL IsWindowInterface(void);
00011 extern void SwitchConsole(void);
00012 extern void SaveCurrentLine(BOOL RewriteLineAtPrompt);
00013 extern void WriteRegistryTxt (LPTW lptw);
00014 extern void SendCTRLandAKey(int code);
00015 extern void WriteIntoKeyBuffer(LPTW lptw,char *StringCommand);
00016 extern void InitIhmDefaultColor(void);
00017 extern BOOL SetIhmSystemDefaultTextBackgroundColor(void);
00018 extern BOOL ReceiveFromAnotherScilab(HWND hWndSend,PCOPYDATASTRUCT MyCopyDataStruct);
00019 extern BOOL GetCommandFromAnotherScilab(char *TitleWindowSend,char *CommandLine);
00020 extern BOOL ActivateTransparencyMode(HWND hWnd);
00021 extern BOOL SetIhmSystemDefaultTextColor(void);
00022 /*-----------------------------------------------------------------------------------*/
00023 extern POINT ScreenMinSize;
00024 extern char ScilexConsoleName[MAX_PATH];
00025 extern char ScilexWindowName[MAX_PATH];
00026 /*-----------------------------------------------------------------------------------*/
00027 BOOL ON_WND_CONSOLE_WM_COPYDATA(HWND hwnd,HWND hWndSend,PCOPYDATASTRUCT MyCopyDataStruct);
00028 BOOL ON_WND_CONSOLE_WM_CLOSE(HWND hwnd);
00029 BOOL ON_WND_CONSOLE_WM_DESTROY(HWND hwnd);
00030 BOOL ON_WND_CONSOLE_WM_CREATE(HWND hwnd,LPCREATESTRUCT lpCreateStruct);
00031 BOOL ON_WND_CONSOLE_WM_DROPFILES(HWND hwnd,HDROP hDrop);
00032 BOOL ON_WND_CONSOLE_WM_PAINT(HWND hwnd);
00033 BOOL ON_WND_CONSOLE_WM_SYSCOLORCHANGE(HWND hwnd);
00034 BOOL ON_WND_CONSOLE_WM_COMMAND(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);
00035 BOOL ON_WND_CONSOLE_WM_EXITSIZEMOVE(void);
00036 BOOL ON_WND_CONSOLE_WM_ENTERSIZEMOVE(void);
00037 BOOL ON_WND_CONSOLE_WM_SIZE(HWND hwnd,UINT state,int cx,int cy);
00038 BOOL ON_WND_CONSOLE_WM_GETMINMAXINFO(HWND hwnd, LPMINMAXINFO lpMinMaxInfo);
00039 BOOL ON_WND_CONSOLE_WM_SETFOCUS(HWND hwnd, HWND hwndOldFocus);
00040 BOOL ON_WND_CONSOLE_WM_SYSCOMMAND(HWND hwnd, WPARAM wParam, LPARAM lParam);
00041 BOOL ON_WND_CONSOLE_WM_ENDSESSION(HWND hwnd, WPARAM wParam, LPARAM lParam);
00042 /*-----------------------------------------------------------------------------------*/
00043 #if (_MSC_VER >= 1200) && (_MSC_VER < 1300) /* Visual Studio 6 */
00044 
00045 #ifndef HANDLE_WM_COPYDATA
00046 
00047 #define HANDLE_WM_COPYDATA(hwnd, wParam, lParam, fn) \
00048     ((fn)((hwnd), (HWND)(wParam), (PCOPYDATASTRUCT)lParam), 0L)
00049 #endif    
00050     
00051 #ifndef HANDLE_WM_MOUSEWHEEL   
00052 #define HANDLE_WM_MOUSEWHEEL(hwnd, wParam, lParam, fn) \
00053     ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (int)(short)HIWORD(wParam), (UINT)(short)LOWORD(wParam)), 0L)
00054 #endif  
00055 
00056 #endif
00057 /*-----------------------------------------------------------------------------------*/
00058 /* parent overlapped window */
00059 EXPORT LRESULT CALLBACK WndParentProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
00060 {
00061   switch (message)
00062     {
00063                 case WM_ENTERSIZEMOVE : ON_WND_CONSOLE_WM_ENTERSIZEMOVE();  break;
00064                 case WM_EXITSIZEMOVE  : ON_WND_CONSOLE_WM_EXITSIZEMOVE();  break;
00065                 case WM_SYSCOMMAND    : ON_WND_CONSOLE_WM_SYSCOMMAND(hwnd,wParam,lParam); break;
00066                 case WM_ENDSESSION    : ON_WND_CONSOLE_WM_ENDSESSION(hwnd,wParam,lParam); break;
00067 
00068                 HANDLE_MSG(hwnd,WM_COMMAND,ON_WND_CONSOLE_WM_COMMAND);
00069                 HANDLE_MSG(hwnd,WM_SYSCOLORCHANGE,ON_WND_CONSOLE_WM_SYSCOLORCHANGE);
00070                 HANDLE_MSG(hwnd,WM_PAINT,ON_WND_CONSOLE_WM_PAINT);
00071                 HANDLE_MSG(hwnd,WM_DROPFILES,ON_WND_CONSOLE_WM_DROPFILES);
00072                 HANDLE_MSG(hwnd,WM_CREATE,ON_WND_CONSOLE_WM_CREATE);
00073                 HANDLE_MSG(hwnd,WM_DESTROY,ON_WND_CONSOLE_WM_DESTROY);
00074                 HANDLE_MSG(hwnd,WM_CLOSE,ON_WND_CONSOLE_WM_CLOSE);
00075                 HANDLE_MSG(hwnd,WM_COPYDATA,ON_WND_CONSOLE_WM_COPYDATA);
00076                 HANDLE_MSG(hwnd,WM_SIZE,ON_WND_CONSOLE_WM_SIZE);
00077                 HANDLE_MSG(hwnd,WM_GETMINMAXINFO,ON_WND_CONSOLE_WM_GETMINMAXINFO);
00078                 HANDLE_MSG(hwnd,WM_SETFOCUS,ON_WND_CONSOLE_WM_SETFOCUS);
00079         }
00080   return DefWindowProc (hwnd, message, wParam, lParam);
00081 }
00082 /*-----------------------------------------------------------------------------------*/
00083 BOOL ON_WND_CONSOLE_WM_COPYDATA(HWND hwnd,HWND hWndSend,PCOPYDATASTRUCT MyCopyDataStruct)
00084 {
00085         char Command[MAX_PATH];
00086         char TitleWndSend[MAX_PATH];
00087 
00088         ReceiveFromAnotherScilab(hWndSend,MyCopyDataStruct);
00089 
00090         if ( GetCommandFromAnotherScilab(TitleWndSend,Command) )StoreCommand1 (Command, 0);
00091 
00092         return TRUE;
00093 }
00094 /*-----------------------------------------------------------------------------------*/
00095 BOOL ON_WND_CONSOLE_WM_CLOSE(HWND hwnd)
00096 {
00097         LPTW lptw=GetTextWinScilab();
00098         SendMessage(lptw->hWndText,WM_CLOSE,(WPARAM)lptw->hWndParent,0);
00099         return TRUE;
00100 }
00101 /*-----------------------------------------------------------------------------------*/
00102 BOOL ON_WND_CONSOLE_WM_DESTROY(HWND hwnd)
00103 {
00104         LPTW lptw=GetTextWinScilab();
00105 
00106         DragAcceptFiles (hwnd, FALSE);
00107         DeleteFont (lptw->hfont);
00108         lptw->hfont = 0;
00109 
00110         return TRUE;
00111 }
00112 /*-----------------------------------------------------------------------------------*/
00113 BOOL ON_WND_CONSOLE_WM_CREATE(HWND hwnd,LPCREATESTRUCT lpCreateStruct)
00114 {
00115         LPTW lptw = lpCreateStruct->lpCreateParams;
00116 
00117         SetWindowLong (hwnd, 0, (LONG) lptw);
00118         lptw->hWndParent = hwnd;
00119         /* get character size */
00120 
00121         DragAcceptFiles (hwnd, TRUE);
00122 
00123         /* Modification Allan CORNET 15/07/03 */
00124         /* Renomme la fenetre avec SCI_VERSION_STRING et numero x associé à la console*/  
00125         {
00126                 char CopyNameConsole[MAX_PATH];
00127                 char *FirstOccurence;
00128                 char *SecondOccurence;
00129                 
00130                 strcpy(CopyNameConsole,ScilexConsoleName);
00131                 FirstOccurence = strtok(CopyNameConsole,"("); 
00132                 SecondOccurence= strtok(NULL,"("); 
00133                 wsprintf(ScilexWindowName,"%s (%s",SCI_VERSION_STRING,SecondOccurence);
00134 
00135                 SetWindowText(hwnd,ScilexWindowName);  
00136         }
00137         return TRUE;
00138 }
00139 /*-----------------------------------------------------------------------------------*/
00140 BOOL ON_WND_CONSOLE_WM_DROPFILES(HWND hwnd,HDROP hDrop)
00141 {
00142         LPTW lptw=GetTextWinScilab();
00143         DragFunc (lptw,hDrop);
00144         return TRUE;
00145 }
00146 /*-----------------------------------------------------------------------------------*/
00147 BOOL ON_WND_CONSOLE_WM_PAINT(HWND hwnd)
00148 {
00149         LPTW lptw=GetTextWinScilab();
00150         RECT rect;
00151         PAINTSTRUCT ps;
00152         HDC hdc;
00153 
00154         hdc = BeginPaint (hwnd, &ps);
00155         GetClientRect (hwnd, &rect);
00156         FillRect (hdc, &rect, lptw->hbrBackground);
00157 
00158         if (lptw->ButtonHeight)
00159         {
00160                 HPEN hPen,hPenOld; 
00161                 HBRUSH hbrush;
00162 
00163                 GetClientRect (hwnd, &rect);
00164                 hbrush = CreateSolidBrush (GetSysColor (COLOR_BTNFACE));
00165                 rect.bottom = lptw->ButtonHeight - 1;
00166                 FillRect (hdc, &rect, hbrush);
00167                 DeleteBrush (hbrush);
00168 
00169                 hPen = CreatePen(PS_SOLID,1,RGB(255,255,255));
00170                 hPenOld = SelectObject(hdc, hPen); 
00171                 MoveToEx (hdc, rect.left-1,0, NULL);
00172                 LineTo (hdc, rect.right+1,0);
00173                 SelectObject(hdc, hPenOld); 
00174                 DeleteObject(hPen); 
00175 
00176                 hPen = CreatePen(PS_SOLID,1,GetSysColor (COLOR_GRAYTEXT));
00177                 hPenOld = SelectObject(hdc, hPen); 
00178                 MoveToEx (hdc, rect.left, lptw->ButtonHeight - 1, NULL);
00179                 LineTo (hdc, rect.right, lptw->ButtonHeight - 1);
00180                 SelectObject(hdc, hPenOld); 
00181                 DeleteObject(hPen); 
00182         }
00183         EndPaint (hwnd, &ps);
00184         
00185         return TRUE;
00186 }
00187 /*-----------------------------------------------------------------------------------*/
00188 BOOL ON_WND_CONSOLE_WM_SYSCOLORCHANGE(HWND hwnd)
00189 {
00190         LPTW lptw=GetTextWinScilab();
00191 
00192         if (lptw->bSysColors)
00193         {
00194                 InitIhmDefaultColor();
00195                 SetIhmSystemDefaultTextBackgroundColor();
00196                 SetIhmSystemDefaultTextColor();
00197         }
00198         SendMessage (lptw->hWndText, WM_SYSCOLORCHANGE, (WPARAM) 0, (LPARAM) 0);
00199 
00200         return TRUE;
00201 }
00202 /*-----------------------------------------------------------------------------------*/
00203 BOOL ON_WND_CONSOLE_WM_COMMAND(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
00204 {
00205         LPTW lptw=GetTextWinScilab();
00206 
00207         WPARAM wParam=id;
00208         LPARAM lParam=(LPARAM)hwndCtl;
00209 
00210         if ( IsWindow (lptw->hWndText) ) SetFocus (lptw->hWndText);
00211 
00212         /* pass on menu commands */
00213         SendMessage (lptw->hWndText, WM_COMMAND, wParam,lParam);
00214         
00215         return TRUE;
00216 }
00217 /*-----------------------------------------------------------------------------------*/
00218 BOOL ON_WND_CONSOLE_WM_EXITSIZEMOVE(void)
00219 {
00220         LPTW lptw=GetTextWinScilab();
00221         extern char copycur_line[1024];
00222 
00223         WriteRegistryTxt(lptw); /* Sauvegarde Position apres deplacement et redimensionnement */
00224         SendCTRLandAKey(CTRLU); /* Scrollbar */
00225         WriteIntoKeyBuffer(lptw,copycur_line);
00226         return TRUE;
00227 }
00228 /*-----------------------------------------------------------------------------------*/
00229 BOOL ON_WND_CONSOLE_WM_ENTERSIZEMOVE(void)
00230 {
00231         SaveCurrentLine(FALSE);
00232         return TRUE;
00233 }
00234 /*-----------------------------------------------------------------------------------*/
00235 BOOL ON_WND_CONSOLE_WM_SIZE(HWND hwnd,UINT state,int cx,int cy)
00236 {
00237         LPTW lptw=GetTextWinScilab();
00238         
00239         if (lptw->lpmw->ShowToolBar)
00240         {
00241                 /* Affichage Zone Toolbar */
00242                 SetWindowPos (lptw->hWndText, (HWND) NULL, 0, lptw->ButtonHeight,cx, cy - lptw->ButtonHeight,SWP_NOZORDER | SWP_NOACTIVATE);
00243         }
00244         else
00245         {
00246                 /* Pas de zone Toolbar */
00247                 SetWindowPos (lptw->hWndText, (HWND) NULL, 0, 0,cx,cy,SWP_NOZORDER | SWP_NOACTIVATE);
00248 
00249         }          
00250         return TRUE;
00251 }
00252 /*-----------------------------------------------------------------------------------*/
00253 BOOL ON_WND_CONSOLE_WM_GETMINMAXINFO(HWND hwnd, LPMINMAXINFO lpMinMaxInfo)
00254 {
00255         POINT *MMinfo = (POINT *) lpMinMaxInfo;
00256         /* minimum size */
00257         /* same minimum size as Linux */
00258         MMinfo[3].x = 400;
00259         MMinfo[3].y =320;
00260         return TRUE;
00261 }
00262 /*-----------------------------------------------------------------------------------*/
00263 BOOL ON_WND_CONSOLE_WM_SETFOCUS(HWND hwnd, HWND hwndOldFocus)
00264 {
00265         LPTW lptw=GetTextWinScilab();
00266         if (IsWindow (lptw->hWndText))  SetFocus (lptw->hWndText);
00267         return TRUE;
00268 }
00269 /*-----------------------------------------------------------------------------------*/
00270 BOOL ON_WND_CONSOLE_WM_SYSCOMMAND(HWND hwnd, WPARAM wParam, LPARAM lParam)
00271 {
00272         LPTW lptw=GetTextWinScilab();
00273         switch (LOWORD (wParam))
00274         {
00275                 case M_CONSOLE:
00276                 {
00277                         SwitchConsole();
00278                         SetActiveWindow(hwnd);
00279                 }
00280                 break;
00281                 
00282                 case M_ABOUT:
00283                         SendMessage (lptw->hWndText, WM_COMMAND, wParam, lParam);
00284                 break;
00285         }
00286         return TRUE;
00287 }
00288 /*-----------------------------------------------------------------------------------*/
00289 BOOL ON_WND_CONSOLE_WM_ENDSESSION(HWND hwnd, WPARAM wParam, LPARAM lParam)
00290 {
00291         return TRUE;
00292 }
00293 /*-----------------------------------------------------------------------------------*/

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