www.pudn.com > VCYXSJRM.rar > canvasFrame.cpp


// canvasFrame.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "canvasr.h" 
#include "canvasFrame.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
#define ID_LIST 1000 
 
///////////////////////////////////////////////////////////////////////////// 
// canvasFrame 
 
IMPLEMENT_DYNCREATE(canvasFrame, CFrameWnd) 
 
canvasFrame::canvasFrame() 
{ 
	RECT rect; 
	Create(NULL,"绘图窗口"); 
	CClientDC dc(this); 
	int width = dc.GetDeviceCaps(HORZRES); 
	int height = dc.GetDeviceCaps(VERTRES); 
	GetWindowRect( &rect ); 
	width = ( width - ( rect.right - rect.left ))/2 ; 
	height = (height - (rect.bottom - rect.top ))/2 ; 
	MoveWindow( width , height , (rect.right - rect.left ) , (rect.bottom - rect.top ) ,true); 
	 
	mdc = new CDC;        //建立一暂存DC对象 
	bitmap = new CBitmap; //建立CBitmap位图对象 
	bitmap->m_hObject = (HBITMAP)::LoadImage(NULL,"ball.bmp",IMAGE_BITMAP,198,113,LR_LOADFROMFILE); //加载原始位图文件 
	mdc->CreateCompatibleDC(&dc); //将mdc转换成与dc相容的DC 
	mdc->SelectObject(bitmap);    //选择位图对象到mdc中 
} 
 
canvasFrame::~canvasFrame() 
{ 
	if(mdc) delete mdc;			//释放资源 
	if(bitmap) delete bitmap;	//释放资源 
} 
 
void canvasFrame::OnSelChange() 
{ 
	CClientDC dc(this);			//取得操作窗口DC 
	Draw(&dc);					//执行重绘函数 
} 
 
BEGIN_MESSAGE_MAP(canvasFrame, CFrameWnd) 
	//{{AFX_MSG_MAP(canvasFrame) 
	ON_WM_CREATE() 
	ON_WM_PAINT() 
	ON_LBN_SELCHANGE(ID_LIST,OnSelChange) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// canvasFrame message handlers 
 
 
int canvasFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)  
{ 
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1) 
		return -1; 
	listbox = new CListBox; 
	listbox->CreateEx(WS_EX_CLIENTEDGE,"ListBox",NULL,LBS_STANDARD|WS_VISIBLE|WS_CHILD,CRect(10,50,180,300),this,ID_LIST); //ミ CListBox ン 
	CString item[15] = {"BLACKNESS","DSTINVERT","MERGECOPY","MERGEPAINT","NOTSRCCOPY","NOTSRCERASE","PATCOPY","PATINVERT","PATPAINT","SRCAND","SRCCOPY","SRCERASE","SRCINVERT","SRCPAINT","WHITENESS"};  //建立CListBox对象 
	DWORD raster[15] = { BLACKNESS , DSTINVERT , MERGECOPY , MERGEPAINT , NOTSRCCOPY , NOTSRCERASE , PATCOPY , PATINVERT , PATPAINT , SRCAND , SRCCOPY , SRCERASE , SRCINVERT , SRCPAINT , WHITENESS };  //选项的数据 
	int index; 
	for(int i=0;i<=14;i++) 
	{ 
		index = listbox->AddString(item[i]);   //加入各个选项 
		listbox->SetItemData(index,raster[i]); //设定各个选项的数据值 
	} 
	listbox->SelectString(10,"SRCCOPY");       //设定默认选项 
	return 0; 
} 
 
void canvasFrame::OnPaint() 
{ 
	CPaintDC dc(this); // device context for painting 
	Draw(&dc);	//执行重绘函数 
} 
 
void canvasFrame::Draw(CDC *dc) 
{ 
	DWORD raster ; 
	int index; 
	index = listbox->GetCurSel();  //选得选项索引值 
	raster = listbox->GetItemData(index); //依索引值取得选项数据值 
	dc->BitBlt(210,50,198,113,mdc,0,0,SRCCOPY); //贴上源位图 
	dc->TextOut(10,10,"Raster 运算值:"); 
	dc->TextOut(210,10,"源位图:"); 
	dc->TextOut(210,173,"经Raster 运算后的位图:"); 
	dc->BitBlt(210,213,198,113,mdc,0,0,raster);//贴上Raster 运算后的位图 
}