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

Last change on this file since 691 was 691, checked in by イグトランス (egtra), 16 years ago

再変換の実装

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