我以前用惯了BCB的,刚来用VC不久,
所以我用VC在写程序的时候喜欢用“base on dialog”来写,而不用单文档或是多文档来写。
现在我有个问题就是,用VC”base on dialog“的程序可不可以象BCB那样就直接在dialog上面画图呢?
应该怎么画?
可以说具体一点吗?
VC真是麻烦,没有BCB好用啊…thank you~~~
所以我用VC在写程序的时候喜欢用“base on dialog”来写,而不用单文档或是多文档来写。
现在我有个问题就是,用VC”base on dialog“的程序可不可以象BCB那样就直接在dialog上面画图呢?
应该怎么画?
可以说具体一点吗?
VC真是麻烦,没有BCB好用啊…thank you~~~
你还可以用控件(好象是Picture控件)
或者void CAboutDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmap bmp;
HBITMAP hbmp;
hbmp=(HBITMAP)::LoadImage(AfxGetApp()->m_hInstance,"../test/about.bmp",
IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE|LR_CREATEDIBSECTION);
bmp.Attach(hbmp);
CBitmap *pbmp=(CBitmap*)dcMem.SelectObject(&bmp); CRect r;
GetWindowRect(&r);
dc.BitBlt(0,0,r.right,r.bottom,&dcMem,0,0,SRCCOPY); dcMem.SelectObject(pbmp); dc.MoveTo(20,20);
dc.LineTo(400,400);
// Do not call CDialog::OnPaint() for painting messages
}
上面那个程序是不是可以画出一条线出来的?(有个lineto())
可以我copy到我的程序里画不出来啊……thank you very much`可不可以举个picture的例子啊?应该和BCB的image差不多吧?
然后在OnInitDialog()添加如下代码:
CStatic *pST=(CStatic *)GetDlgItem(IDC_CLIENT);
pST->GetWindowRect(&m_rectClient);
ScreenToClient(&m_rectClient);//把客户区映射到图形上去
在OnPaint()添加如下代码:
CRgn rgn;
rgn.CreateRectRgnIndirect(&m_rectClient);
dc.SelectClipRgn(&rgn);
dc.Rectangle(m_rectClient);//把背景涂为白色通过上面的代码我已经可以在上面画图了,
现在又有一个新的问题,坐标的转换问题……
我想把坐标系移到picture控件上来,就是说坐标系从picture的(0,0)开始,有什么函数可以直接用的?
他和gdi连用
GDI图形设备接口
void DRAW_WINDOW_BITMAP( HWND &hWnd, CString strPathName )
{
CBitmap * m_pBmp = NULL;
BITMAP bm;
CDC dcMem;
CDC * pDC = NULL; if ( IsFileExist( strPathName ) == FALSE )
{
// 需绘制的位图文件不存在,直接退出
return;
} pDC = new CDC;
HDC hDc = ::GetDC( hWnd );
pDC = CDC::FromHandle( hDc );
// 装载图片
HBITMAP hBitmap = (HBITMAP)::LoadImage ( AfxGetInstanceHandle(),
strPathName, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION |
LR_LOADFROMFILE | LR_DEFAULTSIZE ); ASSERT( hBitmap );
m_pBmp = new CBitmap();
m_pBmp->Attach( hBitmap ); m_pBmp->GetObject( sizeof(bm), (LPVOID)&bm);
dcMem.CreateCompatibleDC(pDC);
CBitmap * pBmpOld = (CBitmap *)dcMem.SelectObject( m_pBmp );
CRect rect;
::GetWindowRect( hWnd, rect ); // 将位图文件缩放绘制窗体中
pDC->StretchBlt( 0, 0, rect.Width(), rect.Height(), &dcMem, 0, 0,
bm.bmWidth, bm.bmHeight, SRCCOPY ); dcMem.SelectObject (pBmpOld ); pDC = NULL;
delete pDC;
delete m_pBmp;
m_pBmp = NULL;
}// 这个函数可以在任一窗体上绘图,传入窗体句柄即可