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


Автор: Barabeo 21.1.2011, 15:16
Есть 2 диалога
Код

BOOL CALLBACK ViewDialogProc(HWND hDlg,UINT Message,WPARAM wParam,
                             LPARAM lParam)
{
    static HWND hPictureWnd;

    switch (Message)
    {
    case WM_INITDIALOG:
         hPictureWnd=GetDlgItem(hDlg,IDC_STATIC);
         SetWindowText(hDlg,ViewDialogProc);
         return TRUE;
    case WM_CLOSE:
        EndDialog(hDlg,IDCANCEL);
    return TRUE;

    }
    return FALSE;
};


И второй
Код

BOOL CALLBACK TrackDialogProc(HWND hDlg,UINT Message,WPARAM wParam,
                              LPARAM lParam)
{
    static HWND hTrackbarWnd;
    static char sVal[20];

    switch (Message)
    {
    case WM_INITDIALOG:
        hTrackbarWnd=GetDlgItem(hDlg,IDC_SLIDER);
        SetWindowText(hDlg,sDlgSliderCaption);
        SetDlgItemText(hDlg,IDC_EDIT_MIN,sMin);
        SetDlgItemText(hDlg,IDC_EDIT_MAX,sMax);
        
        if (!Dot)
            sprintf(sVal,"%d%s",nSliderBegin*(int)fSliderK+(int)fSliderB,ch);
        else
            sprintf(sVal,"%d%s",(int)pow(2,nSliderBegin),ch);

        SetDlgItemText(hDlg,IDC_EDIT_VAL,sVal);
        SendMessage(hTrackbarWnd,TBM_SETRANGE,TRUE,
            MAKELONG(nSliderMin,nSliderMax));        
        SendMessage(hTrackbarWnd,TBM_SETTICFREQ,nSliderStep,nSliderMin);
        SendMessage(hTrackbarWnd,TBM_SETPOS,TRUE,nSliderBegin);
        SetFocus(hTrackbarWnd);
        return TRUE;

        case WM_HSCROLL:
        if (!Dot)
            sprintf(sVal,"%d%s",SendMessage(hTrackbarWnd,TBM_GETPOS,0,0)*
            (int)fSliderK+(int)fSliderB,ch);
        else
            sprintf(sVal,"%d%s",(int)pow(2,SendMessage(hTrackbarWnd,TBM_GETPOS,0,0)),ch);

        SetDlgItemText(hDlg,IDC_EDIT_VAL,sVal);

        return TRUE;

    case WM_CLOSE:
        Dot=FALSE;
        EndDialog(hDlg,IDCANCEL);
    return TRUE;

    case WM_COMMAND:
        switch(LOWORD(wParam))
        {
            
        case IDOK:
            if (!Dot)
                nSliderResult=SendMessage(hTrackbarWnd,TBM_GETPOS,0,0)*
                (int)fSliderK+(int)fSliderB;
            else
                nSliderResult=pow(2,SendMessage(hTrackbarWnd,TBM_GETPOS,0,0));

            Dot=FALSE;
            EndDialog(hDlg,IDOK);
            return TRUE;

        }
        break;
    }
    return FALSE; 
};


Второй диалог работает. А вот когда вызываю первый появляется второй.
Вызов в меню первого
Код

case ID_VIEWRESULT:
        {
          strcpy(pDlgViewCaption,"View Result");
        }

Второго
Код

case ID_MEDIANLINE:
        if(Current)
        {    
            strcpy(sDlgSliderCaption,"Median filter aperture");
            nSliderMin=1;nSliderMax=10;
            nSliderStep=1;nSliderBegin=1;
            strcpy(sMin,"3");
            strcpy(sMax,"21");
            ch[0]=0;fSliderK=2;fSliderB=1;
            
            if (GetTrackValue()==IDOK && nSliderResult!=0)
            {
                MedianLineFilter(Current,Next,(BYTE)nSliderResult);
                Current=Next;
                InvalidateRect(hWnd,NULL,TRUE);
            }
        };
        return; 

    }
};


Чё не так?

Автор: xvr 21.1.2011, 18:01
Цитата(Barabeo @  21.1.2011,  15:16 Найти цитируемый пост)
Вызов в меню первого
А где собственно вызов?


Автор: Barabeo 21.1.2011, 19:09
Цитата(xvr @ 21.1.2011,  18:01)
Цитата(Barabeo @  21.1.2011,  15:16 Найти цитируемый пост)
Вызов в меню первого
А где собственно вызов?

Так а чего второй появляется?Там ведь тоже кагбэ вызова нету?

Автор: xvr 21.1.2011, 20:37
Цитата(Barabeo @  21.1.2011,  19:09 Найти цитируемый пост)
Так а чего второй появляется?Там ведь тоже кагбэ вызова нету? 
В коде, который вы привели вообще нет вызовов никаких диалогов, так что ищите в другом месте - там, где они создаются


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