高手请进!打开一个图片文件,窗体的大小随着图片的大小而改变 怎么才能使窗体的大小随着打开的bmp文件图象大小而改变?要使客户区和图象大小一样大请写具体点,在那个函数中实现高手请赐教 thx....... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在窗体创建之前,先取得图片的尺寸。在precreatewindow()里实现 我是菜鸟,还请高手多多发表意见。我的想法是这样的,CBitmap *pback = new CBitmap;pback->LoadBitmap(IDB_BIT);再用int GetBitmap( BITMAP* pBitMap )得到BITMAP,从BITMAP里面可以得到位图的宽高等值,用这个值做为客户区的值,改变窗口的大小,MoveWindow一把窗口应该就能实现了吧,这可能有闪烁。也许在你建立窗口的时候用这些值直接构建窗口效果会好些吧。 讀出圖象的大小 ,然後調整你的窗口大小:1。 Image tmpImage(filename);DWORD fw=tmpImage.GetWidth();DWORD fh=tmpImage.GetHeight();得到了圖象大小2。根據上邊的兩值設定你的Rect,然後 MoveWindow. BOOL GetBitmapDimensionEx( HBITMAP hBitmap, // handle to bitmap LPSIZE lpDimension // dimensions); 得到图片的大小BOOL SetWindowPos( HWND hWnd, // handle to window HWND hWndInsertAfter, // placement-order handle int X, // horizontal position int Y, // vertical position int cx, // width int cy, // height UINT uFlags // window-positioning options); 设定窗口的大小,cx & cy就是图片的大小; 我是菜鸟,请高手多多讲讲。我觉得可以用CBitmap::GetBitmap( BITMAP* pBitMap )来获得位图的宽高等值。再创建窗口的时候用这些值去建立窗口。没有试过,不知行不? 我现在知道图象的bmWidth,bmHeight怎么使窗口的客户区和图象一样大小用什么实现?在那个函数中实现? movewindow函数可以在任何函数中改变窗体的大小! GetClientRect(&ctRect);ctRect.right=ctRect.left+bmWidth; //bmWidth为图像的宽度ctRect.bottom=ctRect.top+bmHeight; //bmWidth为图像的高度MoveWindow(&ctRect,true);我是在OnDraw()中用的不行,没有窗体大小改变,你有没有可以通过的源程序给我 : [email protected] 设置滚动条,对于bmp图片的处理操作很多书上都有可去看一下直接拿过来用 设置滚动条,对于bmp图片的处理操作很多书上都有可去看一下直接拿过来用 在文档类中添加两个参数cx,cy存储bmp的width,height,然后,在视图类初始化的函数中添加代码,初始化用户窗口尺寸与bmp同尺寸(用文档类中的参数),再调用invalidate();函数,再修改视图类重画的OnDraw();用文档类的cx,cy重画窗口。 我这儿没有资料,有没有源程序,发给我/[email protected] 有没有通过的例子,发给我:[email protected]thx........... 还是我告诉你吧。看看这个例子,对你有什么帮助吧。void CView::OnDraw(CDC* pDC) { CBitmap bmp, *obmp ; CDC mdc ; mdc.CreateCompatibleDC( pDC); bmp.CreateBitmap( m_n, m_m, 4, 8, m_frame_image ) ; if( (obmp = (CBitmap*)mdc.SelectObject( &bmp )) == NULL ){ AfxMessageBox( "message" ) ; } CRect rect; pDC->GetClipBox(&rect); 获取完全包含指定设备场景剪裁区的最小矩形。 pDC->StretchBlt(0,0,(int)rect.right, (int)rect.bottom, &mdc, 0,0, m_n, m_m,SRCCOPY); if( mdc.SelectObject( obmp ) == NULL ) { AfxMessageBox( "message" ) ; } } 语句CRect rect; pDC->GetClipBox(&rect); ,是求客户区的大小。 函数pDC->StretchBlt()是对bitmap进行缩放。具体用法看帮助。 代码放到onDraw()中。 兄弟,这个就是随你的客户区的大小变化的。而且,很敏感呢!:)你要知道OnDraw()的工作机制阿。 刚才自己按照大家讨论的方法试了一下,结果是在ONDRAW里加入GetClientRect(&ctRect);ctRect.right=ctRect.left+200; //主要是测试MOVWINDOW的作用ctRect.bottom=ctRect.top+150; MoveWindow(&ctRect,true);后运行程序,客户区是变了,但是GetClientRect函数得到的是整个客户区(包括工具拦在内),不知道怎么得到空白客户区(即除去工具栏)。另外,主框架大小没有变,可能还要对客户区的父窗口调用一次MoveWindow函数,不过我这个菜鸟因为好久没碰VC了,连怎么得到父窗口句柄都忘了。大家知道的试着作个完整的测试吧,希望把源代码共享出来哈。 为什么我创建登陆框之后,然后获取登陆框的数据时候总是出现非法操作! QQ大家来找茬外挂问题,请教 这个Assertion Failed 是怎么回事,找不到原因 线程中的Sleep()问题! 请问,用VC编写的程序在运行之后,如何动态地修改它的某一个菜单项的访问键和快捷键呢? 关于STL的排序问题,请高手进来帮我看看 关于“猫池”的问题 系统关机 怎么制作高彩工具条? 请问怎么样把一个图像文件(JPEG)以16进制读出并显示出来! 如何设置dialog的title高度? 请问:哪里能免费下载DriveStudio?
CBitmap *pback = new CBitmap;
pback->LoadBitmap(IDB_BIT);再用int GetBitmap( BITMAP* pBitMap )得到BITMAP,从BITMAP里面可以得到位图的宽高等值,用这个值做为客户区的值,改变窗口的大小,MoveWindow一把窗口应该就能实现了吧,这可能有闪烁。也许在你建立窗口的时候用这些值直接构建窗口效果会好些吧。
1。
Image tmpImage(filename);DWORD fw=tmpImage.GetWidth();
DWORD fh=tmpImage.GetHeight();
得到了圖象大小
2。
根據上邊的兩值設定你的Rect,然後 MoveWindow.
HBITMAP hBitmap, // handle to bitmap
LPSIZE lpDimension // dimensions
); 得到图片的大小
BOOL SetWindowPos(
HWND hWnd, // handle to window
HWND hWndInsertAfter, // placement-order handle
int X, // horizontal position
int Y, // vertical position
int cx, // width
int cy, // height
UINT uFlags // window-positioning options
); 设定窗口的大小,cx & cy就是图片的大小;
怎么使窗口的客户区和图象一样大小
用什么实现?
在那个函数中实现?
ctRect.right=ctRect.left+bmWidth; //bmWidth为图像的宽度
ctRect.bottom=ctRect.top+bmHeight; //bmWidth为图像的高度
MoveWindow(&ctRect,true);我是在OnDraw()中用的
不行,没有窗体大小改变,你有没有可以通过的源程序给我 : [email protected]
然后,在视图类初始化的函数中添加代码,初始化用户窗
口尺寸与bmp同尺寸(用文档类中的参数),再调用
invalidate();函数,再修改视图类重画的OnDraw();
用文档类的cx,cy重画窗口。
thx...........
看看这个例子,对你有什么帮助吧。
void CView::OnDraw(CDC* pDC)
{
CBitmap bmp, *obmp ;
CDC mdc ;
mdc.CreateCompatibleDC( pDC);
bmp.CreateBitmap( m_n, m_m, 4, 8, m_frame_image ) ;
if( (obmp = (CBitmap*)mdc.SelectObject( &bmp )) == NULL ){
AfxMessageBox( "message" ) ;
} CRect rect;
pDC->GetClipBox(&rect); 获取完全包含指定设备场景剪裁区的最小矩形。 pDC->StretchBlt(0,0,(int)rect.right, (int)rect.bottom, &mdc, 0,0, m_n, m_m,SRCCOPY);
if( mdc.SelectObject( obmp ) == NULL ) {
AfxMessageBox( "message" ) ;
}
}
语句CRect rect;
pDC->GetClipBox(&rect); ,是求客户区的大小。
函数pDC->StretchBlt()是对bitmap进行缩放。具体用法看帮助。
代码放到onDraw()中。
你要知道OnDraw()的工作机制阿。
GetClientRect(&ctRect);
ctRect.right=ctRect.left+200; //主要是测试MOVWINDOW的作用
ctRect.bottom=ctRect.top+150;
MoveWindow(&ctRect,true);
后运行程序,客户区是变了,但是GetClientRect函数得到的是整个客户区(包括工具拦在内),不知道怎么得到空白客户区(即除去工具栏)。另外,主框架大小
没有变,可能还要对客户区的父窗口调用一次MoveWindow函数,不过我这个菜鸟
因为好久没碰VC了,连怎么得到父窗口句柄都忘了。大家知道的试着作个完整的测试吧,希望把源代码共享出来哈。