source: dev/trunk/ab5.0/abdev/abdev/RadSupport.cpp@ 681

Last change on this file since 681 was 629, checked in by dai_9181, 16 years ago

MDIINFO構造体をリファクタリング。

File size: 12.0 KB
RevLine 
[475]1#include "stdafx.h"
2
[3]3#include "common.h"
4
5#if defined(JPN)
6//日本語
7#include "rad_msg_jpn.h"
8#else
9//英語
10#include "rad_msg_eng.h"
11#endif
12
13int bSupportDlg_NoChange;
14
15LRESULT CALLBACK TestWindowProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
16 switch(message){
17 case WM_CREATE:
18 SetPosCenter(hwnd);
19 break;
20 case WM_KEYDOWN:
21 if(wParam==VK_ESCAPE) DestroyWindow(hwnd);
22 break;
23 case WM_PAINT:
24 break;
25 case WM_CLOSE:
26 DestroyWindow(hwnd);
27 break;
28 case WM_DESTROY:
29 PostQuitMessage(0);
30 break;
31 }
32 return DefWindowProc(hwnd,message,wParam,lParam);
33}
34
35void ShowTestWindow(int WndInfoNum){
36 extern HINSTANCE hInst;
37 extern HANDLE hHeap;
38 static HWND hWnd;
39 HWND hChild;
40 HFONT *lphFont;
41 HANDLE *lphImage;
[624]42 int i2;
[3]43 char temporary[MAX_PATH];
44
45 if(hWnd){
46 OpenIcon(hWnd);
47
48 _endthread();
49 return;
50 }
51
[624]52 ActiveBasic::PM::WindowInfo *pWindowInfo = projectInfo.windowInfos[WndInfoNum];
[3]53
[624]54 if(pWindowInfo->GetStyle()&WS_CHILD){
[3]55 //"チャイルドウィンドウをテスト表示することはできません"
56 MessageBox(hOwner,STRING_RAD_ERROR_CANT_CHILDTEST,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
57
58 _endthread();
59 return;
60 }
61
[616]62 lphFont=(HFONT *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,pWindowInfo->childWindowInfos.size()*sizeof(DWORD));
63 lphImage=(HANDLE *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,pWindowInfo->childWindowInfos.size()*sizeof(DWORD));
[3]64
65 //テスト用のメインウィンドウを作成
[624]66 hWnd=CreateWindowEx(pWindowInfo->GetExStyle(),
[3]67 "TestWindow",
[617]68 pWindowInfo->GetName().c_str(),
[624]69 pWindowInfo->GetStyle()|WS_VISIBLE,
[3]70 CW_USEDEFAULT,CW_USEDEFAULT,
71 pWindowInfo->size.cx,pWindowInfo->size.cy,
72 hOwner,NULL,hInst,NULL);
73
74 //子ウィンドウ作成
[624]75 for( i2=0; i2<static_cast<int>(pWindowInfo->childWindowInfos.size()); i2++ )
76 {
[616]77 if(pWindowInfo->childWindowInfos[i2]->Control==CT_UPDOWN){
[3]78 CreateUpDownControl(
[624]79 pWindowInfo->childWindowInfos[i2]->GetStyle(),
[616]80 pWindowInfo->childWindowInfos[i2]->pos.x,pWindowInfo->childWindowInfos[i2]->pos.y,
81 pWindowInfo->childWindowInfos[i2]->size.cx,pWindowInfo->childWindowInfos[i2]->size.cy,
[3]82 hWnd,0,hInst,
83 0,0,100,0);
84 }
85 else{
[616]86 GetItemClassName(temporary,pWindowInfo->childWindowInfos[i2]->Control);
[3]87 hChild=CreateWindowEx(
[624]88 pWindowInfo->childWindowInfos[i2]->GetExStyle(),
[3]89 temporary,
[624]90 pWindowInfo->childWindowInfos[i2]->GetCaption().c_str(),
91 pWindowInfo->childWindowInfos[i2]->GetStyle(),
[616]92 pWindowInfo->childWindowInfos[i2]->pos.x,
93 pWindowInfo->childWindowInfos[i2]->pos.y,
94 pWindowInfo->childWindowInfos[i2]->size.cx,
95 pWindowInfo->childWindowInfos[i2]->size.cy,
[3]96 hWnd,0,hInst,0);
97
98 lphFont[i2]=CreateFontIndirect(&pWindowInfo->LogFont);
99 SendMessage(hChild,WM_SETFONT,(long)lphFont[i2],0);
100
[616]101 if(pWindowInfo->childWindowInfos[i2]->Control==CT_IMAGEBOX){
[3]102 ///////////////////////////
103 // イメージ ボックスの場合
104 ///////////////////////////
[624]105 if((pWindowInfo->childWindowInfos[i2]->GetStyle()&0x000F)==SS_ICON){
106 if(pWindowInfo->childWindowInfos[i2]->image.IsFile())
107 {
108 lstrcpy(temporary,pWindowInfo->childWindowInfos[i2]->image.path.c_str());
109 }
110 else
111 {
112 temporary[0] = 0;
113 BOOST_FOREACH( const ActiveBasic::Common::ResourceItem &resourceItem, projectInfo.resourceManager.iconResources )
[623]114 {
[624]115 if( resourceItem.idName == pWindowInfo->childWindowInfos[i2]->image.path )
[623]116 {
[624]117 lstrcpy( temporary, resourceItem.filepath.c_str() );
[623]118 break;
119 }
[3]120 }
121 }
122 if(temporary[0]){
[620]123 lstrcpy( temporary, projectInfo.GetWorkDir().GetFullPath( temporary ).c_str() );
[3]124 lphImage[i2]=LoadImage(hInst,temporary,IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
125
126 SendMessage(hChild,STM_SETICON,(long)lphImage[i2],0);
127 }
128 }
[624]129 else if((pWindowInfo->childWindowInfos[i2]->GetStyle()&0x000F)==SS_BITMAP){
130 if(pWindowInfo->childWindowInfos[i2]->image.IsFile())
131 {
132 lstrcpy(temporary,pWindowInfo->childWindowInfos[i2]->image.path.c_str());
133 }
134 else
135 {
136 temporary[0] = 0;
137 BOOST_FOREACH( const ActiveBasic::Common::ResourceItem &resourceItem, projectInfo.resourceManager.bitmapResources )
138 {
139 if( resourceItem.idName == pWindowInfo->childWindowInfos[i2]->image.path )
[623]140 {
[624]141 lstrcpy( temporary, resourceItem.filepath.c_str() );
[623]142 break;
143 }
[3]144 }
145 }
146 if(temporary[0]){
[620]147 lstrcpy( temporary, projectInfo.GetWorkDir().GetFullPath( temporary ).c_str() );
[3]148 lphImage[i2]=LoadImage(hInst,temporary,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
149
150 SendMessage(hChild,STM_SETIMAGE,IMAGE_BITMAP,(long)lphImage[i2]);
151 }
152 }
153 }
154 }
155 }
156
157 MSG msg;
158 while(GetMessage(&msg,NULL,0,0)){
159 if(IsDialogMessage(hWnd,&msg)) continue;
160 TranslateMessage(&msg);
161 DispatchMessage(&msg);
162 }
163
164 //フォントハンドルを破棄
[624]165 for(i2=0;i2<static_cast<int>(pWindowInfo->childWindowInfos.size());i2++){
[3]166 if(lphFont[i2]) DeleteObject(lphFont[i2]);
167 }
168 HeapDefaultFree(lphFont);
169
170 //イメージハンドルを破棄
[624]171 for(i2=0;i2<static_cast<int>(pWindowInfo->childWindowInfos.size());i2++){
[3]172 if(lphImage[i2]){
[624]173 if((pWindowInfo->childWindowInfos[i2]->GetStyle()&0x000F)==SS_ICON)
[3]174 DestroyIcon((HICON)lphImage[i2]);
[624]175 else if((pWindowInfo->childWindowInfos[i2]->GetStyle()&0x000F)==SS_BITMAP)
[3]176 DeleteObject(lphImage[i2]);
177 }
178 }
179 HeapDefaultFree(lphImage);
180
181 hWnd=0;
182
183 _endthread();
184}
185
[624]186void SetSupportDlgData(int WndNum, const ActiveBasic::PM::WindowInfo &windowInfo )
[612]187{
[3]188 ////////////////////////////////////
189 // サポートダイアログの内容をセット
190 ////////////////////////////////////
191 extern RADINFO RadInfo;
192 char temporary[255];
193 HWND hSupport;
194
195 bSupportDlg_NoChange=1;
196
[629]197 hSupport=MdiInfo[WndNum]->MdiRadInfo->hSupport;
[3]198
199 if(RadInfo.NowDragging>=FRAME_CHANGEPOS_START&&RadInfo.NowDragging<=FRAME_CHANGEPOS_END&&
[629]200 (!(MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]!=-1&&MdiInfo[WndNum]->MdiRadInfo->SelectingItem[1]!=-1))){
201 sprintf(temporary,"%d",RadInfo.DraggingRect[0].left-MdiInfo[WndNum]->MdiRadInfo->ClientPos.x);
[3]202 SetDlgItemText(hSupport,IDC_XPOS,temporary);
203
[629]204 sprintf(temporary,"%d",RadInfo.DraggingRect[0].top-MdiInfo[WndNum]->MdiRadInfo->ClientPos.y);
[3]205 SetDlgItemText(hSupport,IDC_YPOS,temporary);
206
207 sprintf(temporary,"%d",RadInfo.DraggingRect[0].right-RadInfo.DraggingRect[0].left);
208 SetDlgItemText(hSupport,IDC_WIDTH,temporary);
209
210 sprintf(temporary,"%d",RadInfo.DraggingRect[0].bottom-RadInfo.DraggingRect[0].top);
211 SetDlgItemText(hSupport,IDC_HEIGHT,temporary);
212 }
[629]213 else if(MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
[3]214 EnableWindow(GetDlgItem(hSupport,IDC_XPOS),0);
215 EnableWindow(GetDlgItem(hSupport,IDC_YPOS),0);
216 EnableWindow(GetDlgItem(hSupport,IDC_SPIN1),0);
217 EnableWindow(GetDlgItem(hSupport,IDC_SPIN2),0);
218 EnableWindow(GetDlgItem(hSupport,IDC_SPIN3),1);
219 EnableWindow(GetDlgItem(hSupport,IDC_SPIN4),1);
220
221 SetDlgItemText(hSupport,IDC_XPOS,"");
222 SetDlgItemText(hSupport,IDC_YPOS,"");
223
[612]224 sprintf(temporary,"%d",windowInfo.size.cx);
[3]225 SetDlgItemText(hSupport,IDC_WIDTH,temporary);
226
[612]227 sprintf(temporary,"%d",windowInfo.size.cy);
[3]228 SetDlgItemText(hSupport,IDC_HEIGHT,temporary);
229 }
230 else{
231 EnableWindow(GetDlgItem(hSupport,IDC_XPOS),1);
232 EnableWindow(GetDlgItem(hSupport,IDC_YPOS),1);
233
[629]234 if(MdiInfo[WndNum]->MdiRadInfo->SelectingItem[1]!=-1){
[3]235 EnableWindow(GetDlgItem(hSupport,IDC_SPIN1),0);
236 EnableWindow(GetDlgItem(hSupport,IDC_SPIN2),0);
237 EnableWindow(GetDlgItem(hSupport,IDC_SPIN3),0);
238 EnableWindow(GetDlgItem(hSupport,IDC_SPIN4),0);
239
240 SetDlgItemText(hSupport,IDC_XPOS,"");
241 SetDlgItemText(hSupport,IDC_YPOS,"");
242 SetDlgItemText(hSupport,IDC_WIDTH,"");
243 SetDlgItemText(hSupport,IDC_HEIGHT,"");
244 }
245 else{
246 EnableWindow(GetDlgItem(hSupport,IDC_SPIN1),1);
247 EnableWindow(GetDlgItem(hSupport,IDC_SPIN2),1);
248 EnableWindow(GetDlgItem(hSupport,IDC_SPIN3),1);
249 EnableWindow(GetDlgItem(hSupport,IDC_SPIN4),1);
250
[629]251 sprintf(temporary,"%d",windowInfo.childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->pos.x);
[3]252 SetDlgItemText(hSupport,IDC_XPOS,temporary);
253
[629]254 sprintf(temporary,"%d",windowInfo.childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->pos.y);
[3]255 SetDlgItemText(hSupport,IDC_YPOS,temporary);
256
[629]257 sprintf(temporary,"%d",windowInfo.childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->size.cx);
[3]258 SetDlgItemText(hSupport,IDC_WIDTH,temporary);
259
[629]260 sprintf(temporary,"%d",windowInfo.childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->size.cy);
[3]261 SetDlgItemText(hSupport,IDC_HEIGHT,temporary);
262 }
263 }
264
265 bSupportDlg_NoChange=0;
266}
267
268BOOL CALLBACK DlgRadSupport(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
269 static BOOL bTimer;
[609]270 int i,i3;
[3]271 char temporary[255];
272 POINTANDSIZE PointAndSize;
273 RECT rect;
274
275 switch(message){
276 case WM_INITDIALOG:
277 SendDlgItemMessage(hwnd,IDC_SPIN1,UDM_SETBUDDY,(long)GetDlgItem(hwnd,IDC_XPOS),0);
278 SendDlgItemMessage(hwnd,IDC_SPIN2,UDM_SETBUDDY,(long)GetDlgItem(hwnd,IDC_YPOS),0);
279 SendDlgItemMessage(hwnd,IDC_SPIN3,UDM_SETBUDDY,(long)GetDlgItem(hwnd,IDC_WIDTH),0);
280 SendDlgItemMessage(hwnd,IDC_SPIN4,UDM_SETBUDDY,(long)GetDlgItem(hwnd,IDC_HEIGHT),0);
281
282 SendDlgItemMessage(hwnd,IDC_SPIN1,UDM_SETRANGE32,0,0x7FFF);
283 SendDlgItemMessage(hwnd,IDC_SPIN2,UDM_SETRANGE32,0,0x7FFF);
284 SendDlgItemMessage(hwnd,IDC_SPIN3,UDM_SETRANGE32,0,0x7FFF);
285 SendDlgItemMessage(hwnd,IDC_SPIN4,UDM_SETRANGE32,0,0x7FFF);
286 return 0;
287 case WM_COMMAND:
288 switch(LOWORD(wParam)){
289 case IDC_TEST:
290 _beginthread(
291 (void (__cdecl *)(void *))ShowTestWindow,
292 0,
[629]293 (void *)GetWndInfoNum(MdiInfo[GetWndNum(GetParent(hwnd))]->path));
[3]294 return 1;
295 case IDC_XPOS:
296 case IDC_YPOS:
297 case IDC_WIDTH:
298 case IDC_HEIGHT:
299 if(HIWORD(wParam)==EN_UPDATE){
300 if(bSupportDlg_NoChange) return 1;
301
302 if(bTimer) KillTimer(hwnd,0);
303
304 bTimer=1;
305 SetTimer(hwnd,0,650,NULL);
306 }
307 return 1;
308 }
309 break;
310 case WM_TIMER:
311 KillTimer(hwnd,0);
312 bTimer=0;
313
314 i=GetWndNum(GetParent(hwnd));
[629]315 ActiveBasic::PM::WindowInfo *pWindowInfo = GetWndInfo(MdiInfo[i]->path);
[3]316
317 for(i3=0;;i3++){
[629]318 if(MdiInfo[i]->MdiRadInfo->SelectingItem[i3]==-1) break;
319 PointAndSize.pos=pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->pos;
320 PointAndSize.size=pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->size;
321 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i]->MdiRadInfo->SelectingItem[i3],(DWORD)&PointAndSize);
[3]322 }
323
324 GetDlgItemText(hwnd,IDC_XPOS,temporary,255);
325 if(temporary[0]){
326 for(i3=0;;i3++){
[629]327 if(MdiInfo[i]->MdiRadInfo->SelectingItem[i3]==-1) break;
328 pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->pos.x=atol(temporary);
[3]329 }
330 }
331
332 GetDlgItemText(hwnd,IDC_YPOS,temporary,255);
333 if(temporary[0]){
334 for(i3=0;;i3++){
[629]335 if(MdiInfo[i]->MdiRadInfo->SelectingItem[i3]==-1) break;
336 pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->pos.y=atol(temporary);
[3]337 }
338 }
339
340 GetDlgItemText(hwnd,IDC_WIDTH,temporary,255);
341 if(temporary[0]){
[629]342 if(MdiInfo[i]->MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
[609]343 pWindowInfo->size.cx=atol(temporary);
[3]344 else{
345 for(i3=0;;i3++){
[629]346 if(MdiInfo[i]->MdiRadInfo->SelectingItem[i3]==-1) break;
347 pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->size.cx=atol(temporary);
[3]348 }
349 }
350 }
351
352 GetDlgItemText(hwnd,IDC_HEIGHT,temporary,255);
353 if(temporary[0]){
[629]354 if(MdiInfo[i]->MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
[609]355 pWindowInfo->size.cy=atol(temporary);
[3]356 else{
357 for(i3=0;;i3++){
[629]358 if(MdiInfo[i]->MdiRadInfo->SelectingItem[i3]==-1) break;
359 pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->size.cy=atol(temporary);
[3]360 }
361 }
362 }
363
364 //描画
[609]365 DrawRadWindow(i,pWindowInfo);
[3]366
367 //スクロールバーをリセット
[629]368 GetClientRect(MdiInfo[i]->MdiRadInfo->hRad,&rect);
[3]369 ResetScrollbarOfRadEditor(i,rect.right,rect.bottom);
370
371 return 1;
372 }
373 return 0;
374}
Note: See TracBrowser for help on using the repository browser.