Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Управление размером окна со вкладками, WTL CPropertySheet WM_SIZE 
:(
    Опции темы
zhekha
Дата 30.4.2008, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сообщение WM_SIZE просто не прилетает, кнопки минимизации и максимизации не работают.
Код

class CMessagesSheet :
    public CPropertySheet
{
public:
    CMessagesSheet (LPCTSTR title);
    ~CMessagesSheet (void);

    LRESULT OnCreate(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
    LRESULT OnDelete(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
    void OnShowWindow(BOOL, INT);
    void OnSize(UINT, CSize);
    void OnClose();
    void OnDestroy();
    
    BEGIN_MSG_MAP(CMessagesSheet)
        MESSAGE_HANDLER(WM_SYSCOMMAND, CPropertySheetImpl<CPropertySheet>::OnSysCommand)
        COMMAND_ID_HANDLER(IDOK, OnCreate)
        COMMAND_ID_HANDLER(IDCANCEL, OnDelete)
        MSG_WM_SHOWWINDOW(OnShowWindow)
        MSG_WM_SIZE(OnSize)
        MSG_WM_CLOSE(OnClose)
        MSG_WM_DESTROY(OnDestroy)

        REFLECT_NOTIFICATIONS()
    END_MSG_MAP()
};


Код

CMessagesSheet::CMessagesSheet(LPCTSTR title)
 : CPropertySheet(title) {

//     m_psh.dwFlags |= PSH_NOAPPLYNOW;
}

CMessagesSheet::~CMessagesSheet(void) { }

void CMessagesSheet::OnShowWindow(BOOL wParam, INT lParam) {

    LONG windowStyles = GetWindowLong(GWL_STYLE);
    windowStyles |= WS_SIZEBOX;
    windowStyles |= WS_MINIMIZEBOX;
    windowStyles |= WS_MAXIMIZEBOX;
    if (SetWindowLong(GWL_STYLE, windowStyles) == 0)
        MessageBox("", "", MB_OK);
    CWindow button = GetDlgItem(IDOK);
    button.SetWindowText("Создать");
    button = GetDlgItem(IDCANCEL);
    button.SetWindowText("Удалить");
}

void CMessagesSheet::OnSize(UINT wParam, CSize lParam) {

    if (wParam == SIZE_MAXIMIZED)
        ShowWindow(SW_MAXIMIZE);
    else if (wParam == SIZE_MINIMIZED)
        ShowWindow(SW_MINIMIZE);
    return;
}

void CMessagesSheet::OnClose() {

    DestroyWindow();
}

void CMessagesSheet::OnDestroy() {

    PostQuitMessage(0);
}

LRESULT CMessagesSheet::OnCreate(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& bHandled) {

    return 0;
}

LRESULT CMessagesSheet::OnDelete(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& bHandled) {

    if (MessageBox("Вы уверены?", "Предупреждение", MB_YESNO | MB_ICONWARNING) != IDYES)
        return 0;

    return 0;
}


Код

CAppModule _Module;

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR lpstrCmdLine, int nCmdShow) {

    HRESULT hRes = ::CoInitialize(NULL);
    ATLASSERT(SUCCEEDED(hRes));

    hRes = _Module.Init(NULL, hInstance);

    CMessageLoop loop;
    _Module.AddMessageLoop(&loop);

    CMessagesSheet msDlg("");
    msDlg.Create();

    int nRet = loop.Run();

    _Module.Term();
    ::CoUninitialize();

    return 0;
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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