кто-нибудь может обьяснить как сделать рабочие скролинги в окне?
собственно задание: открыть картинку, при растягивании окна если окно меньше картинки то создать полосы прокрутки. Так вот чтото с этим скролингом непонятно как он работает
полосы рисуются сбоку и снизу, но не работают( или коряво работают), ползунок с начального положения не сдвигается, но кaртинку заставляет извратно перерисовываться.
я так понимаю нада еще чтото в таблицу откликов добавлять
... ток неуверен что.
файл .ЦПП
#include <owl\framewin.h>
#include <owl\gdiobjec.h>
#include "klif.h"
#include <owl/opensave.h>
#include <owl/validate.h>
#include <owl/dialog.h>
#include <owl/scroller.h>
class picWindow:public TFrameWindow
{
protected:
TDib* DIB;
TBitmap* Bitmap;
TOpenSaveDialog::TData* FileData;
TPalette* DIBPalette;
int JustOpened;
void FileOpen();
void picWindow::Ext();
void picWindow::Paint(TDC&dc,bool,TRect&);
public:
picWindow(TWindow*parent,char far*title):TFrameWindow(parent,title)
{
FileData=new TOpenSaveDialog::TData
(OFN_HIDEREADONLY|OFN_FILEMUSTEXIST,
"graficheskoe izobragenie (*.bmp)|*.bmp|", 0, "", "bmp");
JustOpened=1;
AssignMenu(IDM_MENU1);
Attr.X=40; Attr.Y=40;
Attr.W=640; Attr.H=480;
Attr.AccelTable=IDM_MENU1;
}
public:
picWindow(TWindow*parent,const char far*title);
~picWindow()
{
delete Bitmap;
delete DIB;
}
DECLARE_RESPONSE_TABLE(picWindow);
};
//============================================================================
void picWindow::FileOpen()
{
if ((TFileOpenDialog(this,*FileData,0,"shozanah??")).Execute()==IDOK)
{
DIB=new TDib(FileData->FileName);
DIBPalette=new TPalette(*DIB);
JustOpened=0;
Invalidate();
Bitmap=new TBitmap(*DIB,DIBPalette);
}
else
{
char msg[20]="nichego ne otkrito";
MessageBox(msg,"WARNING", MB_OK|MB_ICONWARNING);
}
}
//=============================================================================
void picWindow::Ext()
{
if(MessageBox("really exit??\n",
"BMP Viewer v0.1",MB_YESNO|MB_ICONQUESTION)== IDYES)
{CloseWindow(0);}
}
//=============================================================================
void picWindow::Paint(TDC&dc,bool,TRect&)
{
TMemoryDC MDC(dc);
if(!JustOpened)
{ if(Bitmap->Width()>GetClientRect().Width()
||Bitmap->Height()>GetClientRect().Height())
{
Attr.Style |= WS_VSCROLL | WS_HSCROLL;
Scroller = new TScroller (this, 10, 10,
Bitmap->Width()-GetClientRect().Width(),Bitmap->Height()-GetClientRect().Height());
MDC.SelectObject(*Bitmap);
dc.StretchBlt(0,0,Bitmap->Width(),Bitmap->Height(),MDC,0,0,
Bitmap->Width(),Bitmap->Height(),SRCCOPY);
dc.RestoreObjects();
}
else {UpdateWindow();
MDC.SelectObject(*Bitmap);
dc.StretchBlt(0,0,Bitmap->Width(),Bitmap->Height(),MDC,0,0,
Bitmap->Width(),Bitmap->Height(),SRCCOPY);
dc.RestoreObjects();}
}
}
//=============================================================================
DEFINE_RESPONSE_TABLE1(picWindow,TWindow)
EV_COMMAND(102,FileOpen),
EV_COMMAND(108,Ext),
EV_WM_CREATE,
EV_WM_CLOSE,
EV_WM_SIZE,
END_RESPONSE_TABLE;
//============================================================================
class MyApp:public TApplication{
public:
virtual void InitMainWindow();
};
void MyApp::InitMainWindow(void)
{
picWindow* myWin=new picWindow(0,"BMPwiever");
SetMainWindow(myWin); }
int OwlMain(int,char*[]){
MyApp myApp;
return myApp.Run( ); }
-----------------------------------------------------------------------------------
файл klif.h
#define IDM_MENU1 1
-----------------------------------------------------------------------------------
файл klif.rc
#define IDM_MENU1 1
IDM_MENU1 MENU
{
POPUP "menu"
{
MENUITEM "open file", 102
MENUITEM SEPARATOR
MENUITEM "exit", 108
}
}