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

Last change on this file since 475 was 475, checked in by dai_9181, 15 years ago

構成管理を変更中・・・(いったんコミット)

File size: 6.9 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);
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    extern PROJECTINFO ProjectInfo;
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);
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_CHAR:
64            //デフォルト処理を行わない(WM_CHARを呼び出さないため)
65            return 0;
66        case WM_IME_COMPOSITION:
67            if(!TextEditEvent_IME_Composition(hwnd,lParam)) return 0;
68
69            //デフォルト処理を行う
70            break;
71
72
73
74        //////////////////////////
75        // マウス関連のイベント
76        //////////////////////////
77
78        case WM_LBUTTONDOWN:
79            pos.x=LOWORD(lParam);
80            pos.y=HIWORD(lParam);
81            TextEditEvent_LButtonDown(hwnd,&pos);
82            return 0;
83        case WM_LBUTTONUP:
84            pos.x=LOWORD(lParam);
85            pos.y=HIWORD(lParam);
86            TextEditEvent_LButtonUp(hwnd,&pos);
87            return 0;
88        case WM_MOUSEMOVE:
89            pos.x=LOWORD(lParam);
90            pos.y=HIWORD(lParam);
91            TextEditEvent_MouseMove(hwnd,&pos);
92            return 0;
93        case WM_LBUTTONDBLCLK:
94            pos.x=LOWORD(lParam);
95            pos.y=HIWORD(lParam);
96            TextEditEvent_LButtonDblClk(hwnd,&pos);
97            return 0;
98        case WM_RBUTTONUP:
99            pos.x=LOWORD(lParam);
100            pos.y=HIWORD(lParam);
101            ClientToScreen(hwnd,&pos);
102
103            //ポップアップメニューを表示
104            extern HMENU hEditMenu;
105            TrackPopupMenu(hEditMenu,TPM_LEFTALIGN|TPM_RIGHTBUTTON,pos.x,pos.y,0,hOwner,NULL);
106            return 0;
107
108
109
110        //////////////////////////////
111        // キーボード関係のイベント
112        //////////////////////////////
113
114        case WM_KEYUP:
115            TextEditEvent_KeyUp(hwnd,wParam);
116            return 0;
117        case WM_CHAR:
118            TextEditEvent_Char(hwnd,wParam);
119            return 0;
120        case WM_KEYDOWN:
121            TextEditEvent_KeyDown(hwnd,wParam,lParam);
122            return 0;
123
124
125
126        case WM_PAINT:
127            PAINTSTRUCT ps;
128            HDC hdc;
129
130            WndNum=GetWndNum(GetParent(hwnd));
131            if(WndNum==-1) return 0;
132
133            hdc=BeginPaint(hwnd,&ps);
134            TextEdit_DrawBuffer(hdc,WndNum);
135            EndPaint(hwnd,&ps);
136            return 0;
137        case WM_SETFOCUS:
138            WndNum=GetWndNum(GetParent(hwnd));
139            if(WndNum==-1) return 0;
140
141            //線型キャレットを作成
142            CreateCaret(hwnd,NULL,1,font_height);
143
144            //キャレットポジションを設定
145            ResetCaretPos(WndNum);
146
147            //キャレットを表示(改行の処理中のキャレットちらつきを防止の考慮に注意)
148            if(hide_caret_switch==0) ShowCaret(hwnd);
149            return 0;
150        case WM_RESETCARETPOS:
151            WndNum=GetWndNum(GetParent(hwnd));
152            ResetCaretPos(WndNum);
153            return 0;
154        case WM_KILLFOCUS:
155            HideCaret(hwnd);
156            DestroyCaret();
157            return 0;
158        case WM_MOUSEWHEEL:
159            int zDelta;
160            zDelta= (short) HIWORD(wParam);
161
162            WndNum=GetWndNum(GetParent(hwnd));
163            si.cbSize=sizeof(SCROLLINFO);
164            si.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
165            GetScrollInfo(hwnd,SB_VERT,&si);
166
167            i=0;
168            if(zDelta>=120){
169                //上へスクロール
170                i=-3;
171            }
172            else if(zDelta<=-120){
173                //下へスクロール
174                i=3;
175            }
176
177            if(i){
178                GetClientRect(hwnd,&rect);
179                i=max(-si.nPos,min(i,si.nMax-(rect.bottom/font_height-2)-si.nPos));
180                if(i!=0){
181                    si.nPos+=i;
182                    SetScrollInfo(hwnd,SB_VERT,&si,1);
183
184                    InvalidateRect(hwnd,NULL,0);
185                }
186                ResetCaretPos(WndNum);
187            }
188            return 0;
189        case WM_SIZE:
190            WndNum=GetWndNum(GetParent(hwnd));
191            if(WndNum==-1) return 0;
192            InvalidateRect(hwnd,NULL,0);
193            return 0;
194        case WM_VSCROLL:
195            WndNum=GetWndNum(GetParent(hwnd));
196            si.cbSize=sizeof(SCROLLINFO);
197            si.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
198            GetScrollInfo(hwnd,SB_VERT,&si);
199            if(LOWORD(wParam)==SB_LINEUP) i=-1;
200            else if(LOWORD(wParam)==SB_LINEDOWN) i=1;
201            else if(LOWORD(wParam)==SB_PAGEUP) i=-(signed int)si.nPage;
202            else if(LOWORD(wParam)==SB_PAGEDOWN) i=si.nPage;
203            else if(LOWORD(wParam)==SB_THUMBTRACK) i=HIWORD(wParam)-si.nPos;
204            else i=0;
205            GetClientRect(hwnd,&rect);
206            i=max(-si.nPos,min(i,si.nMax-(rect.bottom/font_height-2)-si.nPos));
207            if(i!=0){
208                si.nPos+=i;
209                SetScrollInfo(hwnd,SB_VERT,&si,1);
210
211                InvalidateRect(hwnd,NULL,0);
212            }
213            ResetCaretPos(WndNum);
214            return 0;
215        case WM_HSCROLL:
216            WndNum=GetWndNum(GetParent(hwnd));
217            si.cbSize=sizeof(SCROLLINFO);
218            si.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
219            GetScrollInfo(hwnd,SB_HORZ,&si);
220            if(LOWORD(wParam)==SB_LINEUP) i=-1;
221            else if(LOWORD(wParam)==SB_LINEDOWN) i=1;
222            else if(LOWORD(wParam)==SB_PAGEUP) i=-(signed int)si.nPage;
223            else if(LOWORD(wParam)==SB_PAGEDOWN) i=si.nPage;
224            else if(LOWORD(wParam)==SB_THUMBTRACK) i=HIWORD(wParam)-si.nPos;
225            else i=0;
226
227            GetClientRect(hwnd,&rect);
228
229            int iControlTabSpace;
230            iControlTabSpace=MdiInfo[WndNum].pMdiTextEdit->iWidth_ControlTabSpace;
231
232            i=max(-si.nPos,min(i,si.nMax-((rect.right-iControlTabSpace)/font_width)-si.nPos));
233            if(i!=0){
234                si.nPos+=i;
235                SetScrollInfo(hwnd,SB_HORZ,&si,1);
236
237                InvalidateRect(hwnd,NULL,0);
238            }
239            ResetCaretPos(WndNum);
240
241            //ルーラーを再描画
242            InvalidateRect(MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->hRulerWnd,NULL,0);
243            UpdateWindow(MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->hRulerWnd);
244
245            return 0;
246        case WM_CLOSE:
247            CloseDocWindow(GetWndNum(hwnd));
248            pobj_nv->bMDIZoomed=IsZoomed(hwnd);
249            i=DefMDIChildProc(hwnd,message,wParam,lParam);
250
251            //メニュー状態を設定
252            ResetState_DocMenu();
253
254            return i;
255
256
257
258        case WM_SEARCH_TAB_CREATE:
259            HWND hOneTabWnd;
260            hOneTabWnd=CreateWindowEx(0,"OneTab","OneTab",
261                WS_CHILD|WS_VISIBLE,
262                0,0,0,0,
263                MdiInfo[wParam].pMdiTextEdit->pobj_WebResult->hwnd,0,hInst,0);
264
265            SetWindowLongPtr(hOneTabWnd,GWLP_USERDATA,(long)lParam);
266
267            return (LRESULT)hOneTabWnd;
268        case WM_SEARCH_TAB_CLOSE:
269            DestroyWindow((HWND)lParam);
270            return 0;
271    }
272    return DefMDIChildProc(hwnd,message,wParam,lParam);
273}
Note: See TracBrowser for help on using the repository browser.