00001
00002
00003
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)
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
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
00120
00121 DragAcceptFiles (hwnd, TRUE);
00122
00123
00124
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
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);
00224 SendCTRLandAKey(CTRLU);
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
00242 SetWindowPos (lptw->hWndText, (HWND) NULL, 0, lptw->ButtonHeight,cx, cy - lptw->ButtonHeight,SWP_NOZORDER | SWP_NOACTIVATE);
00243 }
00244 else
00245 {
00246
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
00257
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