⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buttonp.cpp

📁 连接oracle
💻 CPP
字号:
#include "stdafx.h"
#include "drawcli.h"
#include "ButtonP.h"

BEGIN_MESSAGE_MAP(CButtonP, CButton)
	//{{AFX_MSG_MAP(CButtonP)
	ON_WM_LBUTTONDOWN()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


void CButtonP::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
	CDC* pDC = CDC::FromHandle(lpDIS->hDC);


	if (lpDIS->itemAction & ODA_DRAWENTIRE)
	{
		int x=lpDIS->rcItem.left;
		int y=lpDIS->rcItem.top;
		int x1=lpDIS->rcItem.right;
		int y1=lpDIS->rcItem.bottom;

		int i;
		double a,b,c;
		char   sdx[40];

		a = (double)(x1-x-x0)/(double)nWidth;
		b = (double)(y1-y-y0)/(double)nHeight;
		a = min(a, b);
		c = a;

		//页数
		nPw = (nWidth + pWidth - 1)/pWidth;
		nPh = (nHeight + pHeight - 1)/pHeight;

		dx = (int)(pWidth*a);
		dy = (int)(pHeight*a);

		//
		cbrs.CreateSolidBrush(RGB(128,128,0));
		obrs = pDC->SelectObject(&cbrs);

		a = (double)nWidth/(double)pWidth;
		b = (double)nHeight/(double)pHeight;
		x = (int)(a * dx);
		y = (int)(b * dy);

		pt[0].x = x0+0;	pt[0].y = y0+0;
		pt[1].x = x0+0;	pt[1].y = y0+y;
		pt[2].x = x0+x;	pt[2].y = y0+y;
		pt[3].x = x0+x; pt[3].y = y0+0;
		pDC->Polygon(pt,4);
		pDC->SelectObject(obrs);
		cbrs.DeleteObject();

		//
		//标注总宽度
		memset(&lft,0,sizeof(LOGFONT));
		strcpy(lft.lfFaceName,"Arial");
		lft.lfHeight = -14;
		cfont.CreateFontIndirect(&lft);
		ofont= pDC->SelectObject(&cfont);
		i = sprintf(sdx,"%dMM", (int) (a*m_mWidth));
		cs = pDC->GetTextExtent(sdx, i);
		pDC->TextOut(x0+(x-cs.cx)/2,4, sdx);
		pDC->MoveTo(x0,2);
		pDC->LineTo(x0,y0);
		pDC->MoveTo(x0+x,2);
		pDC->LineTo(x0+x,y0);
		pDC->SelectObject(ofont);
		cfont.DeleteObject();
		//
		//标注总高度
		memset(&lft,0,sizeof(LOGFONT));
		strcpy(lft.lfFaceName,"Arial");
		lft.lfHeight = -14;
		lft.lfEscapement = 900;
		cfont.CreateFontIndirect(&lft);
		ofont= pDC->SelectObject(&cfont);
		i = sprintf(sdx,"%dMM", (int) (b*m_mHeight));
		cs = pDC->GetTextExtent(sdx, i);
		pDC->TextOut(4, y0+y-(y-cs.cx)/2, sdx);
		pDC->MoveTo(2, y0);
		pDC->LineTo(x0,y0);
		pDC->MoveTo(2, y0+y);
		pDC->LineTo(x0,y0+y);
		pDC->SelectObject(ofont);
		cfont.DeleteObject();


		//

		for (i=0; i<=nPw; i++)
		{
			jpage[i]=(int)(x0+i*dx);
			pDC->MoveTo(jpage[i], y0+0);
			pDC->LineTo(jpage[i], (int)(y0+dy*nPh));
		}
		for (i=0; i<=nPh; i++)
		{
			kpage[i]=(int)(y0+i*dy);
			pDC->MoveTo((int)x0+0,     kpage[i]);
			pDC->LineTo((int)(x0+dx*nPw),kpage[i]);
		}


		//selected page
		
		cbrs.CreateSolidBrush(RGB(0,192,0));
		obrs = pDC->SelectObject(&cbrs);

		pt[0].x = jpage[iw];		pt[0].y = kpage[ih];
		pt[1].x = jpage[iw];		pt[1].y = kpage[ih+1];
		pt[2].x = jpage[iw+1];		pt[2].y = kpage[ih+1];
		pt[3].x = jpage[iw+1];      pt[3].y = kpage[ih];
		
		pDC->Polygon(pt,4);
		pDC->SelectObject(obrs);
		cbrs.DeleteObject();

		//
		memset(&lft,0,sizeof(LOGFONT));
		strcpy(lft.lfFaceName,"Arial");

		lft.lfHeight = -12;
		cfont.CreateFontIndirect(&lft);
		ofont= pDC->SelectObject(&cfont);
		i = sprintf(sdx,"%dMM", m_mWidth);
		cs = pDC->GetTextExtent(sdx, i);

		pDC->TextOut(jpage[iw]+(int)(dx-cs.cx)/2, kpage[ih]+2, sdx);

		pDC->SelectObject(ofont);
		cfont.DeleteObject();

		//
		memset(&lft,0,sizeof(LOGFONT));
		strcpy(lft.lfFaceName,"Arial");

		lft.lfHeight = -12;
		lft.lfEscapement = 900;

		cfont.CreateFontIndirect(&lft);
		ofont= pDC->SelectObject(&cfont);
		
		i = sprintf(sdx,"%dMM", m_mHeight);
		cs = pDC->GetTextExtent(sdx, i);
		
		pDC->TextOut(jpage[iw]+2, kpage[ih]+(int)(dy-cs.cx)/2+cs.cx, sdx);

		pDC->SelectObject(ofont);
		cfont.DeleteObject();

		cpn.CreatePen(PS_SOLID, 2, RGB(255,0,0));
		opn  = pDC->SelectObject(&cpn);

		pt[0].x = (int)(x0+pminx*c);	pt[0].y = (int)(y0+pminy*c);
		pt[1].x = (int)(x0+pminx*c);	pt[1].y = (int)(y0+pmaxy*c);
		pt[2].x = (int)(x0+pmaxx*c);	pt[2].y = (int)(y0+pmaxy*c);
		pt[3].x = (int)(x0+pmaxx*c);    pt[3].y = (int)(y0+pminy*c);
		pt[4] = pt[0];
		pDC->Polyline(pt,5);

		pDC->SelectObject(opn);
		cpn.DeleteObject();

	}


	if ((lpDIS->itemState & ODS_SELECTED) &&
		(lpDIS->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))
	{
		// item has been selected - hilite frame
		CBrush br(RGB(0,0,0));
		pDC->FrameRect(&lpDIS->rcItem, &br);
	}

	if (!(lpDIS->itemState & ODS_SELECTED) &&
		(lpDIS->itemAction & ODA_SELECT))
	{
		// Item has been de-selected -- remove frame
		CBrush br(RGB(255,255,255));
		pDC->FrameRect(&lpDIS->rcItem, &br);
	}
}
void CButtonP::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	int i;
	for (i=0; i<nPw; i++)
	{
		if (point.x >=jpage[i] && point.x<jpage[i+1]) break;
	}
	if (i==nPw) return;

	iw = i;

	for (i=0; i<nPh; i++)
	{
		if (point.y >=kpage[i] && point.y<kpage[i+1]) break;
	}
	if (i==nPh) return;
	ih = i;

	Invalidate();

}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -