CreateDialog()

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by kap00stik, 30 Nov 2012.

  1. kap00stik

    kap00stik New Member

    Joined:
    26 Jun 2010
    Messages:
    28
    Likes Received:
    0
    Reputations:
    0
    Создаю из основного окна с помощью CreateDialog() второе не модальное окно. Окно вижу, больше ничего делать не могу, не сдвинуть его, не кнопку нажать. В чем дело?
     
  2. Spot

    Spot Elder - Старейшина

    Joined:
    1 Mar 2007
    Messages:
    461
    Likes Received:
    38
    Reputations:
    1
    Как бэ код неплохо было бы увидеть.
    Ну а если без кода - то прочитай тут
     
  3. MTV

    MTV New Member

    Joined:
    16 Feb 2011
    Messages:
    180
    Likes Received:
    2
    Reputations:
    0
    неплохо было бы еще обработчик для окна написать...
     
  4. kap00stik

    kap00stik New Member

    Joined:
    26 Jun 2010
    Messages:
    28
    Likes Received:
    0
    Reputations:
    0
    тут и читал, собственно этот кусок и юзаю, только диалог естественно сам слепил. Окно выводится, но ни на что не реагирует. :confused:

    PHP:

    #include "test.h"

    //глобальные переменные
    HINSTANCE    hInst;                            
    HWND hConfDlg = NULL;

    //точка входа
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
        
    MSG msg;
        
    WNDCLASSEX wcex;

        
    wcex.cbSize            = sizeof(WNDCLASSEX);
        
    wcex.style          = CS_HREDRAW | CS_VREDRAW;
        
    wcex.lpfnWndProc    = WndProc;
        
    wcex.cbClsExtra     = 0;
        
    wcex.cbWndExtra     = 0;
        
    wcex.hInstance      = hInstance;
        
    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
        
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
        
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
        
    wcex.lpszMenuName   = NULL;
        
    wcex.lpszClassName  = WND_CLASS;
        
    wcex.hIconSm        = NULL;

        if(!
    RegisterClassEx(&wcex)) return 1;

        
    hInst = hInstance; 

        
    HWND hWnd = CreateWindow(WND_CLASS, 
                                
    WND_CLASS, 
                                 
    WS_OVERLAPPEDWINDOW,
                                 
                                 
    CW_USEDEFAULT, 
                                 
    CW_USEDEFAULT, 
                                 
    500, 100, 
                                 
    NULL, 
                                 
    NULL, 
                                 
    hInstance, 
                                 
    NULL);
        
        if(!
    hWnd) 
            return 
    1;
        
        
    ShowWindow(hWnd, SW_SHOW);
        
    UpdateWindow(hWnd);


        while(
    GetMessage(&msg, NULL, 0, 0) != 0) 
        { 
            if(!
    IsWindow(hConfDlg) || !IsDialogMessage(hConfDlg, &msg)) 
            { 
                
    TranslateMessage(&msg); 
                
    DispatchMessage(&msg); 
            } 
        } 

        return (int)
    msg.wParam;
    }


    //процедура основного окна
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (
    message)
        {

        case 
    WM_CREATE:
            
    //Здесь ставлю отлов на Alt + Shift + P и хочу показать окно про отлове
            
    RegisterHotKey(hWnd, HOTKEY_ID, MOD_ALT | MOD_SHIFT, 'P');
        break;

        case 
    WM_HOTKEY:
            if(
    wParam == HOTKEY_ID)
            {    
    //Наш ход
                
                //выводим окно
                
    if(!IsWindow(hConfDlg)) 
                {
                    
    hConfDlg = CreateDialog(hInst, MAKEINTRESOURCE(DLG_CONF), hWnd, (DLGPROC)ConfigProc);
                    
    ShowWindow(hConfDlg, SW_SHOW);
                }
            }
        break;

        case 
    WM_DESTROY:
            
    PostQuitMessage(0);
        break;

        default:
            return 
    DefWindowProc(hWnd, message, wParam, lParam);
        }
        return 
    0;
    }


    //Процедура диалога
    BOOL CALLBACK ConfigProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam) 
    { 
        
     
        switch (
    message) 
        { 
            case 
    WM_INITDIALOG: 
               
                return 
    TRUE; 
     
            case 
    WM_COMMAND: 
                switch (
    LOWORD(wParam)) 
                { 
                    case 
    IDOK: 
                      
     
                        return 
    TRUE; 
     
                    case 
    IDCANCEL: 
                        
    DestroyWindow(hwndDlg); 
                        
    hConfDlg = NULL; 
                        return 
    TRUE; 
                } 
        } 
        return 
    FALSE; 
    } 


    Что не так?
     
    #4 kap00stik, 30 Nov 2012
    Last edited: 30 Nov 2012
  5. kap00stik

    kap00stik New Member

    Joined:
    26 Jun 2010
    Messages:
    28
    Likes Received:
    0
    Reputations:
    0
    все отбой, заработало все.