Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение размера экрана и картинки приложения MFC 
:(
    Опции темы
ALEXks340442068
Дата 12.9.2011, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.9.2011

Репутация: нет
Всего: нет



Здравствуйте. У меня такая проблема. Мне надо написать прогу ,которая обрабатывает изображения. Я знаю как создать окно приложения. знаю как загрузить картинку. Но если картинка больше экрана то мне надо изменить размер экрана приложения. Я не знаю где прочитать ,чтобы сделать так: когда меняешь размер окна приложения ,то у него появлялись скролы и оно не было растянуто ниже физического экрана. ( мне надо уметь загружать изображения до 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;    // запуск приложения

PM MAIL   Вверх
spyswamp
Дата 13.9.2011, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 18.8.2006

Репутация: нет
Всего: 7



CView используй для вывода картинки. Дело в том, что по дефолту нету никаких скроллов в main-окне в SDI/MDI схемах.
Но если ты извращенец, то прикручивай скроллы самостоятельно и следи за их position'ами (тоже самостоятельно). Мое личное мнение: скроллы в MFC - одно из самых убогих творений, если ими управлять вручную. А если все же решишься, то куча примеров на codeproject.com ждет тебя.


--------------------
- why you call it beta?
- cuz it's betta then nothin'
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0786 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.