Здравствуйте. У меня такая проблема. Мне надо написать прогу ,которая обрабатывает изображения. Я знаю как создать окно приложения. знаю как загрузить картинку. Но если картинка больше экрана то мне надо изменить размер экрана приложения. Я не знаю где прочитать ,чтобы сделать так: когда меняешь размер окна приложения ,то у него появлялись скролы и оно не было растянуто ниже физического экрана. ( мне надо уметь загружать изображения до 2000*2000) вот код:
Код | #include "afxwin.h" // MFC Основные и стандартные компоненты #include "afxext.h" // MFC Расширения #include "resource1.h" // Идентификаторы ресурсов
class CMainWnd : public CFrameWnd { public: HBITMAP hBitmap; CBitmap m_bmpBitmap; BITMAP bit; CMainWnd(); // Конструктор по умолчанию afx_msg void OnPaint(); // функция рисования int OnCreate(LPCREATESTRUCT lpCreateStruct); // эта функция вызывается при создании окна void MenuExit(); // Процедура реакции на выбор пункта меню void MenuOpen(); ~CMainWnd(); // Деструктор private: DECLARE_MESSAGE_MAP(); // таблица откликов CStatusBar m_wndStatusBar; // класс панели состояния CMenu m_wndMenu; // Это наш класс Меню };
BEGIN_MESSAGE_MAP(CMainWnd, CFrameWnd) // таблица откликов на сообщения ON_WM_CREATE() // событие создания окна ON_WM_PAINT() // событие рисования ON_COMMAND(ID_FILE_EXIT,MenuExit) // Вот она , обработка реакции на выбор меню ON_COMMAND(ID_FILE_OPEN40001,MenuOpen) // Вот она , обработка реакции на выбор меню END_MESSAGE_MAP()
void CMainWnd::MenuExit() { DestroyWindow(); // Уничтожить окно }
void CMainWnd::OnPaint() { CPaintDC pDC(this); pDC.DrawState(CPoint(10,10), CSize(bit.bmWidth,bit.bmHeight), m_bmpBitmap, DST_BITMAP|DSS_NORMAL); }
void CMainWnd::MenuOpen() { CPaintDC pDC(this); CFileDialog fileDialog(TRUE,NULL,L"*.bmp"); //объект класса выбора файла int result = fileDialog.DoModal(); if (result==IDOK) { HBITMAP hBitmap = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), fileDialog.GetPathName(), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); m_bmpBitmap.Detach(); m_bmpBitmap.Attach(hBitmap); m_bmpBitmap.GetBitmap(&bit); pDC.DrawState(CPoint(10,10), CSize(bit.bmWidth,bit.bmHeight), m_bmpBitmap, DST_BITMAP|DSS_NORMAL); this->InvalidateRect(0,FALSE); } }
int CMainWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; m_wndStatusBar.Create(this); m_wndMenu.LoadMenu(IDR_MENU1); // Загрузить меню из файла ресурса SetMenu(&m_wndMenu); // Установить меню return 0;
}
CMainWnd::CMainWnd() { Create(NULL,L"Step1",WS_OVERLAPPEDWINDOW,rectDefault, NULL,NULL); // Создать окно программы
/*MyStatic = new CStatic(); if (MyStatic!=NULL) MyStatic->Create(L"MyStatic",WS_CHILD|WS_VISIBLE|SS_CENTER, CRect(10,10,100,50),this); // создали MyButton = new CMyButton(); if (MyButton!=NULL) MyButton->Create(L"MyButton",WS_CHILD|WS_VISIBLE|SS_CENTER, CRect(120,10,220,50),this,IDC_MYBUTTON); MyEdit = new CEdit(); if (MyEdit!=NULL) MyEdit->Create(WS_CHILD|WS_VISIBLE|WS_BORDER, CRect(240,10,340,50),this,IDC_MYEDIT);*/ }
CMainWnd::~CMainWnd() { //if (MyStatic!=NULL) delete MyStatic; // удалить динамический объект //if (MyButton!=NULL) delete MyButton; // удалить динамический объект //if (MyEdit!=NULL) delete MyEdit; // удалить динамический объект }
class CMyApp : public CWinApp { public: CMyApp(); //конструктор по умолчанию virtual BOOL InitInstance();//стандартная инициализация };
CMyApp::CMyApp() // конструктор главного класса приложения {}
BOOL CMyApp::InitInstance() // стандартная инициализация { m_pMainWnd=new CMainWnd(); // создать класс окна ASSERT(m_pMainWnd); // проверить его правильность m_pMainWnd->ShowWindow(SW_SHOW);// Показать окно m_pMainWnd->UpdateWindow(); // Обновить окно return TRUE; // Вернуть что все нормально };
CMyApp theApp; // запуск приложения
|
|