我想更改VIEW大小以适合输入图像的大小。
首先,我使用File Open打开bmp或jpg(jpeg / gif)图像。
打开bmp图片:
void CDrawToolView::ShowBitmap(CDC* pDC,CString strPicPath)
{
HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,strPicPath,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
m_bitmap.Detach();
m_bitmap.Attach(hBitmap);
CRect rect;
GetClientRect(&rect);
CDC dcImage;
if (!dcImage.CreateCompatibleDC(pDC))
{
return;
}
BITMAP bm;
m_bitmap.GetBitmap(&bm);
dcImage.SelectObject(&m_bitmap);
pDC->StretchBlt(0,0,rect.right,rect.bottom,&dcImage,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
}
打开jpg(jpeg / gif)图片:
void CDrawToolView::ShowPic(CDC* pDC,CString strPicPath)
{
if(!m_MyImage.IsNull())
m_MyImage.Destroy();
HRESULT hResult=m_MyImage.Load(strPicPath);
int iWidth=m_MyImage.GetWidth();
int iHeight=m_MyImage.GetHeight();
m_MyImage.Draw(pDC->m_hDC,0,0,iWidth,iHeight);
}
然后,我想要更改cs.cx
中cs.cy
和MainFrm.cpp
的图片大小。
我原来的VIEW设置是:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
cs.x=320;
cs.y=15;
cs.cx=441; //210*2
cs.cy=701; //297*2
return TRUE;
}
我可以使用指针将输入图像的宽度和高度从CDrawToolView
传递到cs.cx
中的cs.cy
和MainFrm.cpp
,并自动更改VIEW大小吗? / p>
修改
我尝试使用OnSize
发回cx
和cy
:
void CDrawToolView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
CWnd* pMainFrame = this->GetParent();
::SendMessage(pMainFrame->m_hWnd,WM_SIZE,0,0);
}
如何将宽度和高度传递给它?
答案 0 :(得分:1)
要在创建窗口之前将所需的窗口尺寸调整为特定的客户端尺寸,您需要致电AdjustWindowRect
或AdjustWindowRectEx
。
来自文档:
根据客户矩形的所需大小计算窗口矩形所需的大小。
CREATESTRUCT
成员style
和dwExStyle
可以使用所需的窗口样式和扩展窗口样式。
答案 1 :(得分:1)
注意:未经测试的代码 - 其中一些是伪代码,但它应该为您提供IDEA:
inline BOOL MoveWindow(HWND hwnd, const RECT & rect, BOOL bRepaint)
{
return ::MoveWindow(hwnd, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, bRepaint);
}
void CDrawToolView::LoadPic(CString strPicPath)
{
if(!m_MyImage.IsNull())
m_MyImage.Destroy();
HRESULT hResult=m_MyImage.Load(strPicPath);
int iWidth=m_MyImage.GetWidth();
int iHeight=m_MyImage.GetHeight();
CRect client(0, 0, iWidth, iHeight);
AdjustWindowRect(&client, GetWindowStyle(GetHwnd()), TRUE/FALSE); // You will need to write the helper: GetWindowStyle, or replace this with more statements to obtain the style into a DWORD and then use that DWORD here...
ResizeWindow(GetHwnd(), &client, TRUE);
}