source: dev/trunk/ab5.0/abdev/abdev/Ruler.cpp@ 772

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

Windows 7タスクバーへの対応を実装。
(#245)

File size: 2.7 KB
Line 
1#include "stdafx.h"
2
3#include "common.h"
4
5void OnPaint(HWND hwnd,HDC hdc)
6{
7 CRuler *pobj_Ruler = reinterpret_cast<CRuler *>(GetWindowLongPtr(hwnd,GWLP_USERDATA));
8 pobj_Ruler->draw(hdc);
9}
10
11LRESULT 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
25CRuler::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}
43CRuler::~CRuler(){
44 DeleteDC(memdc);
45 DeleteObject(hMemBmp);
46
47 DestroyWindow(hRulerWnd);
48}
49
50void CRuler::resize(int x,int y,int cx,int cy){
51 MoveWindow(hRulerWnd,x,y,cx,cy,1);
52}
53void 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}
Note: See TracBrowser for help on using the repository browser.