Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Trouble with Dialog


Автор: devmstr 15.10.2005, 20:23
Где я затупил? Диалог показывается, но приложиние никак не реагирует на сообщения. Диалог активен. При возникновении сообщения заходит в цикл обработки сообщений и выходит. Окно не перетаскивается и не закрывается!
Код

#include <windows.h>
#include "resource.h"

LONG WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wPar, LPARAM lPar);
BOOL WINAPI AbtDlgProc(HWND hDlg, UINT msg, WPARAM wPar, LPARAM lPar);

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, INT nCmdShow)
{
    HWND     hWnd;
    WNDCLASS wnd;
    memset(&wnd, 0, sizeof(WNDCLASS));
    wnd.hbrBackground    = (HBRUSH)COLOR_WINDOW;
    wnd.hCursor            = LoadCursor(NULL, IDC_ARROW);
    wnd.hIcon            = LoadIcon(NULL, IDI_APPLICATION);
    wnd.hInstance        = hInst;
    wnd.lpfnWndProc        = WndProc;
    wnd.lpszClassName    = "FirstDialog";
    wnd.lpszMenuName    = NULL;

    RegisterClass(&wnd);

    hWnd = CreateWindow("FirstDialog", "First Dialog", WS_OVERLAPPEDWINDOW, 10,20, 150, 160, NULL,
                        NULL, hInst, NULL);
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);

    MSG msg;
    while (GetMessage(&msg, 0,NULL, NULL))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }


}

LONG WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wPar, LPARAM lPar)
{
    static HINSTANCE hInst;
    switch(msg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    case WM_CREATE:
        hInst = ((LPCREATESTRUCT)lPar)->hInstance;
        break;
    case WM_LBUTTONDOWN:
        DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUT), hWnd, (DLGPROC)AbtDlgProc);
        break;
    default:
        return DefWindowProc(hWnd, msg, wPar, lPar);
    }
    return 0;
}

BOOL WINAPI AbtDlgProc(HWND hDlg, UINT msg, WPARAM wPar, LPARAM lPar)
{
    switch (msg)
    {
    case WM_INITDIALOG:
        return TRUE;
        break;
    case WM_CLOSE:
        EndDialog(hDlg, IDOK);
        break;
    default:
        return FALSE;
    }
    return TRUE;
}



Кусок ресурса сгенерированного компилятором
//
// Dialog
//

IDD_ABOUT DIALOGEX 0, 0, 195, 127
STYLE DS_SETFONT | DS_FIXEDSYS | WS_VISIBLE | WS_DISABLED | WS_CAPTION
EXSTYLE WS_EX_OVERLAPPEDWINDOW
CAPTION "About"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
END


Автор: devmstr 18.10.2005, 08:06
Может выслать весь проект?

Автор: rsm 18.10.2005, 19:13
Честно говоря ничего не понял - в чем же проблема? Судя по коду, должно быть так:
1. Создается окно класса "FirstDialog".
2. При щелчке левой кнопкой мыши на клиентской части окна открывается диалог.
3. При закрытии диалога он закрывается.
Какое из перечисленных действий не работает?

Автор: devmstr 18.10.2005, 20:20
Блин!!!!!!!!!
Вот это я затупил!
Как то случайно поменял Disable на true.

rsm
Извините за беспокойтво.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)