source: dev/trunk/ab5.0/abdev/abdev/TextEditor_EventProc.cpp@ 613

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

"extern PROJECTINFO ProjectInfo;" をすべて除去した。
PROJECTINFO構造体の定義位置を移動した。

File size: 6.9 KB
RevLine 
[475]1#include "stdafx.h"
2
[3]3#include "Common.h"
4
5
6//IME関連のイベント
7void TextEditEvent_IME_StartComposition(HWND hwnd);
8BOOL TextEditEvent_IME_Composition(HWND hwnd,LPARAM lParam);
9
10//マウス関連のイベント
11void TextEditEvent_LButtonDown(HWND hwnd,POINT *pMousePos);
12void TextEditEvent_LButtonUp(HWND hwnd,POINT *pMousePos);
13void TextEditEvent_MouseMove(HWND hwnd,POINT *pMousePos);
14void TextEditEvent_LButtonDblClk(HWND hwnd,POINT *pMousePos);
15
16//キーボード関連のイベント
17void TextEditEvent_KeyUp(HWND hwnd,int nVirtualKey);
18void TextEditEvent_Char(HWND hwnd,int nVirtualKey);
19void TextEditEvent_KeyDown(HWND hwnd,int nVirtualKey,int lKeyData);
20
21
22
23HFONT hFont_TextEdit,hFont_HyperLink_TextEdit;
24int font_width,font_height;
25
26//改行時のキャレットちらつき防止用
27int hide_caret_switch;
28
29LRESULT CALLBACK TextEditProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
30 extern HANDLE hHeap;
31 extern HWND hDocCombo;
32 extern MDIINFO MdiInfo[MAX_WNDNUM];
33 static DWORD dwAutoScroll;
34 extern COMPLEMENT_WINDOW_INFO ComplementWndInfo;
35 int i,WndNum;
36 SCROLLINFO si;
37 RECT rect;
38 POINT pos;
39
40 switch(message){
41 case WM_MDIACTIVATE:
42 if(!lParam) return 0;
43 i=GetWndNum((HWND)lParam);
44 if(i==-1) return 0; //ウィンドウが初期状態の場合
45
46 i=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[i].title);
47 SendMessage(hDocCombo,CB_SETCURSEL,i,0);
48 SetStatusText(NULL);
49 ResetState_EditMenu();
50 return 0;
51
52
53
54 ///////////////////////
55 // IME関連のイベント
56 ///////////////////////
57
58 case WM_IME_STARTCOMPOSITION:
59 TextEditEvent_IME_StartComposition(hwnd);
60 //デフォルト処理を行う
61 break;
62 case WM_IME_CHAR:
63 //デフォルト処理を行わない(WM_CHARを呼び出さないため)
64 return 0;
65 case WM_IME_COMPOSITION:
66 if(!TextEditEvent_IME_Composition(hwnd,lParam)) return 0;
67
68 //デフォルト処理を行う
69 break;
70
71
72
73 //////////////////////////
74 // マウス関連のイベント
75 //////////////////////////
76
77 case WM_LBUTTONDOWN:
78 pos.x=LOWORD(lParam);
79 pos.y=HIWORD(lParam);
80 TextEditEvent_LButtonDown(hwnd,&pos);
81 return 0;
82 case WM_LBUTTONUP:
83 pos.x=LOWORD(lParam);
84 pos.y=HIWORD(lParam);
85 TextEditEvent_LButtonUp(hwnd,&pos);
86 return 0;
87 case WM_MOUSEMOVE:
88 pos.x=LOWORD(lParam);
89 pos.y=HIWORD(lParam);
90 TextEditEvent_MouseMove(hwnd,&pos);
91 return 0;
92 case WM_LBUTTONDBLCLK:
93 pos.x=LOWORD(lParam);
94 pos.y=HIWORD(lParam);
95 TextEditEvent_LButtonDblClk(hwnd,&pos);
96 return 0;
97 case WM_RBUTTONUP:
98 pos.x=LOWORD(lParam);
99 pos.y=HIWORD(lParam);
100 ClientToScreen(hwnd,&pos);
101
102 //ポップアップメニューを表示
103 extern HMENU hEditMenu;
104 TrackPopupMenu(hEditMenu,TPM_LEFTALIGN|TPM_RIGHTBUTTON,pos.x,pos.y,0,hOwner,NULL);
105 return 0;
106
107
108
109 //////////////////////////////
110 // キーボード関係のイベント
111 //////////////////////////////
112
113 case WM_KEYUP:
114 TextEditEvent_KeyUp(hwnd,wParam);
115 return 0;
116 case WM_CHAR:
117 TextEditEvent_Char(hwnd,wParam);
118 return 0;
119 case WM_KEYDOWN:
120 TextEditEvent_KeyDown(hwnd,wParam,lParam);
121 return 0;
122
123
124
125 case WM_PAINT:
126 PAINTSTRUCT ps;
127 HDC hdc;
128
129 WndNum=GetWndNum(GetParent(hwnd));
130 if(WndNum==-1) return 0;
131
132 hdc=BeginPaint(hwnd,&ps);
133 TextEdit_DrawBuffer(hdc,WndNum);
134 EndPaint(hwnd,&ps);
135 return 0;
136 case WM_SETFOCUS:
137 WndNum=GetWndNum(GetParent(hwnd));
138 if(WndNum==-1) return 0;
139
140 //線型キャレットを作成
141 CreateCaret(hwnd,NULL,1,font_height);
142
143 //キャレットポジションを設定
144 ResetCaretPos(WndNum);
145
146 //キャレットを表示(改行の処理中のキャレットちらつきを防止の考慮に注意)
147 if(hide_caret_switch==0) ShowCaret(hwnd);
148 return 0;
149 case WM_RESETCARETPOS:
150 WndNum=GetWndNum(GetParent(hwnd));
151 ResetCaretPos(WndNum);
152 return 0;
153 case WM_KILLFOCUS:
154 HideCaret(hwnd);
155 DestroyCaret();
156 return 0;
157 case WM_MOUSEWHEEL:
158 int zDelta;
159 zDelta= (short) HIWORD(wParam);
160
161 WndNum=GetWndNum(GetParent(hwnd));
162 si.cbSize=sizeof(SCROLLINFO);
163 si.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
164 GetScrollInfo(hwnd,SB_VERT,&si);
165
166 i=0;
167 if(zDelta>=120){
168 //上へスクロール
169 i=-3;
170 }
171 else if(zDelta<=-120){
172 //下へスクロール
173 i=3;
174 }
175
176 if(i){
177 GetClientRect(hwnd,&rect);
178 i=max(-si.nPos,min(i,si.nMax-(rect.bottom/font_height-2)-si.nPos));
179 if(i!=0){
180 si.nPos+=i;
181 SetScrollInfo(hwnd,SB_VERT,&si,1);
182
183 InvalidateRect(hwnd,NULL,0);
184 }
185 ResetCaretPos(WndNum);
186 }
187 return 0;
188 case WM_SIZE:
189 WndNum=GetWndNum(GetParent(hwnd));
190 if(WndNum==-1) return 0;
191 InvalidateRect(hwnd,NULL,0);
192 return 0;
193 case WM_VSCROLL:
194 WndNum=GetWndNum(GetParent(hwnd));
195 si.cbSize=sizeof(SCROLLINFO);
196 si.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
197 GetScrollInfo(hwnd,SB_VERT,&si);
198 if(LOWORD(wParam)==SB_LINEUP) i=-1;
199 else if(LOWORD(wParam)==SB_LINEDOWN) i=1;
200 else if(LOWORD(wParam)==SB_PAGEUP) i=-(signed int)si.nPage;
201 else if(LOWORD(wParam)==SB_PAGEDOWN) i=si.nPage;
202 else if(LOWORD(wParam)==SB_THUMBTRACK) i=HIWORD(wParam)-si.nPos;
203 else i=0;
204 GetClientRect(hwnd,&rect);
205 i=max(-si.nPos,min(i,si.nMax-(rect.bottom/font_height-2)-si.nPos));
206 if(i!=0){
207 si.nPos+=i;
208 SetScrollInfo(hwnd,SB_VERT,&si,1);
209
210 InvalidateRect(hwnd,NULL,0);
211 }
212 ResetCaretPos(WndNum);
213 return 0;
214 case WM_HSCROLL:
215 WndNum=GetWndNum(GetParent(hwnd));
216 si.cbSize=sizeof(SCROLLINFO);
217 si.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
218 GetScrollInfo(hwnd,SB_HORZ,&si);
219 if(LOWORD(wParam)==SB_LINEUP) i=-1;
220 else if(LOWORD(wParam)==SB_LINEDOWN) i=1;
221 else if(LOWORD(wParam)==SB_PAGEUP) i=-(signed int)si.nPage;
222 else if(LOWORD(wParam)==SB_PAGEDOWN) i=si.nPage;
223 else if(LOWORD(wParam)==SB_THUMBTRACK) i=HIWORD(wParam)-si.nPos;
224 else i=0;
225
226 GetClientRect(hwnd,&rect);
227
228 int iControlTabSpace;
[24]229 iControlTabSpace=MdiInfo[WndNum].pMdiTextEdit->iWidth_ControlTabSpace;
[3]230
231 i=max(-si.nPos,min(i,si.nMax-((rect.right-iControlTabSpace)/font_width)-si.nPos));
232 if(i!=0){
233 si.nPos+=i;
234 SetScrollInfo(hwnd,SB_HORZ,&si,1);
235
236 InvalidateRect(hwnd,NULL,0);
237 }
238 ResetCaretPos(WndNum);
239
240 //ルーラーを再描画
[24]241 InvalidateRect(MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->hRulerWnd,NULL,0);
242 UpdateWindow(MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->hRulerWnd);
[3]243
244 return 0;
245 case WM_CLOSE:
246 CloseDocWindow(GetWndNum(hwnd));
247 pobj_nv->bMDIZoomed=IsZoomed(hwnd);
248 i=DefMDIChildProc(hwnd,message,wParam,lParam);
249
250 //メニュー状態を設定
251 ResetState_DocMenu();
252
253 return i;
254
255
256
257 case WM_SEARCH_TAB_CREATE:
258 HWND hOneTabWnd;
259 hOneTabWnd=CreateWindowEx(0,"OneTab","OneTab",
260 WS_CHILD|WS_VISIBLE,
261 0,0,0,0,
[24]262 MdiInfo[wParam].pMdiTextEdit->pobj_WebResult->hwnd,0,hInst,0);
[3]263
[302]264 SetWindowLongPtr(hOneTabWnd,GWLP_USERDATA,(long)lParam);
[3]265
266 return (LRESULT)hOneTabWnd;
267 case WM_SEARCH_TAB_CLOSE:
268 DestroyWindow((HWND)lParam);
269 return 0;
270 }
271 return DefMDIChildProc(hwnd,message,wParam,lParam);
272}
Note: See TracBrowser for help on using the repository browser.