1 | #include "stdafx.h"
|
---|
2 |
|
---|
3 | #include "common.h"
|
---|
4 |
|
---|
5 | void OnPaint(HWND hwnd,HDC hdc)
|
---|
6 | {
|
---|
7 | CRuler *pobj_Ruler = reinterpret_cast<CRuler *>(GetWindowLongPtr(hwnd,GWLP_USERDATA));
|
---|
8 | pobj_Ruler->draw(hdc);
|
---|
9 | }
|
---|
10 |
|
---|
11 | LRESULT CALLBACK RulerProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
|
---|
12 | switch(message){
|
---|
13 | case WM_PAINT:
|
---|
14 | PAINTSTRUCT ps;
|
---|
15 | OnPaint(hwnd,BeginPaint(hwnd,&ps));
|
---|
16 | EndPaint(hwnd,&ps);
|
---|
17 | break;
|
---|
18 | case WM_PRINTCLIENT:
|
---|
19 | OnPaint(hwnd, reinterpret_cast<HDC>(wParam));
|
---|
20 | break;
|
---|
21 | }
|
---|
22 | return DefWindowProc(hwnd,message,wParam,lParam);
|
---|
23 | }
|
---|
24 |
|
---|
25 | CRuler::CRuler(HWND hParent,MDIINFO *pMdiInfo)
|
---|
26 | : pMdiInfo( pMdiInfo )
|
---|
27 | {
|
---|
28 | hRulerWnd=CreateWindowEx(0,"Ruler","Ruler",
|
---|
29 | WS_CHILD|WS_CLIPCHILDREN|WS_VISIBLE,
|
---|
30 | 0,0,0,0,
|
---|
31 | hParent,0,hInst,0);
|
---|
32 | SetWindowLongPtr(hRulerWnd,GWLP_USERDATA,(LONG_PTR)this);
|
---|
33 |
|
---|
34 | HDC hdc;
|
---|
35 | hdc=GetDC(hRulerWnd);
|
---|
36 |
|
---|
37 | memdc=CreateCompatibleDC(hdc);
|
---|
38 | hMemBmp=CreateCompatibleBitmap(hdc,ScreenX,HEIGHT_RULER);
|
---|
39 | SelectObject(memdc,hMemBmp);
|
---|
40 |
|
---|
41 | ReleaseDC(hRulerWnd,hdc);
|
---|
42 | }
|
---|
43 | CRuler::~CRuler(){
|
---|
44 | DeleteDC(memdc);
|
---|
45 | DeleteObject(hMemBmp);
|
---|
46 |
|
---|
47 | DestroyWindow(hRulerWnd);
|
---|
48 | }
|
---|
49 |
|
---|
50 | void CRuler::resize(int x,int y,int cx,int cy){
|
---|
51 | MoveWindow(hRulerWnd,x,y,cx,cy,1);
|
---|
52 | }
|
---|
53 | void CRuler::draw(HDC hdc){
|
---|
54 | int i;
|
---|
55 |
|
---|
56 | //スクロールバーによるベースポジションを取得
|
---|
57 | int BaseX,BaseY;
|
---|
58 | BaseX=0;
|
---|
59 | BaseY=0;
|
---|
60 | GetScrollBaseCaretPos(this->pMdiInfo,&BaseX,&BaseY);
|
---|
61 |
|
---|
62 | int iControlTabSpace;
|
---|
63 | iControlTabSpace=this->pMdiInfo->pMdiTextEdit->iWidth_ControlTabSpace;
|
---|
64 |
|
---|
65 | HBRUSH hBrush,hOldBrush;
|
---|
66 | hBrush=CreateSolidBrush(RGB(230,230,230));
|
---|
67 |
|
---|
68 | HPEN hPen,hOldPen;
|
---|
69 | hPen=CreatePen(PS_SOLID,0,RGB(60,60,60));
|
---|
70 |
|
---|
71 | //背景色を塗りつぶす
|
---|
72 | hOldBrush=(HBRUSH)SelectObject(memdc,hBrush);
|
---|
73 | PatBlt(memdc,0,0,ScreenX,HEIGHT_RULER,PATCOPY);
|
---|
74 | SelectObject(memdc,hOldBrush);
|
---|
75 |
|
---|
76 |
|
---|
77 | extern HFONT hRulerFont;
|
---|
78 | HFONT hOldFont;
|
---|
79 | hOldFont=(HFONT)SelectObject(memdc,hRulerFont);
|
---|
80 |
|
---|
81 | hOldPen=(HPEN)SelectObject(memdc,hPen);
|
---|
82 |
|
---|
83 | //ラインを描画
|
---|
84 | extern int font_width;
|
---|
85 | int x;
|
---|
86 | for(x=iControlTabSpace,i=-BaseX;x<ScreenX;x+=font_width,i++){
|
---|
87 | if(i%10==0){
|
---|
88 | MoveToEx(memdc,x,0,NULL);
|
---|
89 | LineTo(memdc,x,HEIGHT_RULER);
|
---|
90 | }
|
---|
91 | else if(i%5==0){
|
---|
92 | MoveToEx(memdc,x,HEIGHT_RULER/2,NULL);
|
---|
93 | LineTo(memdc,x,HEIGHT_RULER);
|
---|
94 | }
|
---|
95 | else{
|
---|
96 | MoveToEx(memdc,x,HEIGHT_RULER-3,NULL);
|
---|
97 | LineTo(memdc,x,HEIGHT_RULER);
|
---|
98 | }
|
---|
99 | }
|
---|
100 |
|
---|
101 | //桁番号を描画
|
---|
102 | char temporary[32];
|
---|
103 | SetBkColor(memdc,RGB(230,230,230));
|
---|
104 | SetTextColor(memdc,RGB(60,60,60));
|
---|
105 | for(x=iControlTabSpace,i=-BaseX;x<ScreenX;x+=font_width,i++){
|
---|
106 | if(i%10==0){
|
---|
107 | sprintf(temporary,"%d",i);
|
---|
108 | TextOut(memdc,x+2,0,temporary,lstrlen(temporary));
|
---|
109 | }
|
---|
110 | }
|
---|
111 |
|
---|
112 | SelectObject(memdc,hOldPen);
|
---|
113 | SelectObject(memdc,hOldFont);
|
---|
114 |
|
---|
115 |
|
---|
116 | //画面に描画
|
---|
117 | BitBlt(hdc,0,0,ScreenX,HEIGHT_RULER,memdc,0,0,SRCCOPY);
|
---|
118 |
|
---|
119 | DeleteObject(hBrush);
|
---|
120 | DeleteObject(hPen);
|
---|
121 | }
|
---|