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

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

svn:eol-styleとsvn:mime-type(文字コード指定含む)の設定

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