Как вызвать диалоговое в WinApi?
От: Vinnyl Россия  
Дата: 05.05.02 18:05
Оценка:
Подскажите пожалуйста, как в Visual C++ 6.0 вызвать диалоговое окно, по описанному в редакторе ресурсов шаблону? Я не хочу пользоваться MFC, как обойтись только WinApi не прибегая к классам диалоговых окон и т.д.
Vinnyl
Re: Как вызвать диалоговое в WinApi?
От: Gosha Украина  
Дата: 05.05.02 18:32
Оценка: 2 (1)
Здравствуйте Vinnyl, Вы писали:

V>Подскажите пожалуйста, как в Visual C++ 6.0 вызвать диалоговое окно, по описанному в редакторе ресурсов шаблону? Я не хочу пользоваться MFC, как обойтись только WinApi не прибегая к классам диалоговых окон и т.д.

CreateDialog
DialogBox
Re: Как вызвать диалоговое в WinApi?
От: Курилка Россия http://kirya.narod.ru/
Дата: 05.05.02 18:35
Оценка: 2 (1)
Здравствуйте Vinnyl, Вы писали:

V>Подскажите пожалуйста, как в Visual C++ 6.0 вызвать диалоговое окно, по описанному в редакторе ресурсов шаблону? Я не хочу пользоваться MFC, как обойтись только WinApi не прибегая к классам диалоговых окон и т.д.


Вот тут есть готовый, но немного перегруженный пример.
Re[2]: Как вызвать диалоговое в WinApi?
От: Vinnyl Россия  
Дата: 05.05.02 18:52
Оценка:
Здравствуйте Gosha, Вы писали:

G>CreateDialog

G>DialogBox

А по подробнее нельзя (индефикатор ресурса пусь будет IDD_DIALOG)? Заранее спасибо.
Vinnyl
Re[3]: Как вызвать диалоговое в WinApi?
От: Курилка Россия http://kirya.narod.ru/
Дата: 05.05.02 18:57
Оценка: 6 (1)
Здравствуйте Vinnyl, Вы писали:

V>Здравствуйте Gosha, Вы писали:


G>>CreateDialog

G>>DialogBox

V>А по подробнее нельзя (индефикатор ресурса пусь будет IDD_DIALOG)? Заранее спасибо.


Смотри пример-то, там всё есть (основное как ни странно в конце...):

int WINAPI WinMain 
(HINSTANCE hInst, HINSTANCE hPrevInst, char * cmdParam, int cmdShow) 
{ 
    hDialog = ::CreateDialog (hInst, MAKEINTRESOURCE (IDD_DIALOG), 0, DlgProc); 

::ShowWindow(hDialog, SW_SHOW); 

MSG  msg; 
while (::GetMessage(&msg, NULL, 0, 0)) 
{ 
if (!::IsDialogMessage (hDialog, & msg)) 
        { 
            ::TranslateMessage ( & msg ); 
            ::DispatchMessage ( & msg ); 
        } 
} 

return msg.wParam; 
}


К этому ещё нужна громадная DlgProc, которая будет все мессаги обрабатывать (смотри там же, не буду форум захламлять), если есть ещё вопросы — пиши.
Re[3]: Как вызвать диалоговое в WinApi?
От: SergH Россия  
Дата: 05.05.02 19:24
Оценка:
Здравствуйте Vinnyl, Вы писали:

V>Здравствуйте Gosha, Вы писали:


G>>CreateDialog

G>>DialogBox

V>А по подробнее нельзя (индефикатор ресурса пусь будет IDD_DIALOG)? Заранее спасибо.


Если модальный диалог, то так:

BOOL CALLBACK DlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
{

     switch (Msg)
     { 
     //
     // обрабатываем нужные сообщения
     //
     default:
         // если сообщение не обрабатывается - FALSE
         return FALSE;
     }
     
     // если сообщение обработано - TRUE
     return TRUE;
}

int APIENTRY WinMain(HINSTANCE hInst,...)
{
     // возвращаемое значение - как у DoModal
     DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG), NULL, DlgProc);
     return 0;
}


Если немодальный — Курилка написал всё, что надо.
Делай что должно, и будь что будет
Re[4]: Как вызвать диалоговое в WinApi?
От: Vinnyl Россия  
Дата: 06.05.02 04:11
Оценка:
Здравствуйте Курилка,

Я в диалоговое окно добавил Slider, как теперь в главной программе получить его значение?

Заранее спасибо.
Vinnyl
Re[5]: Как вызвать диалоговое в WinApi?
От: Курилка Россия http://kirya.narod.ru/
Дата: 06.05.02 05:05
Оценка:
Здравствуйте Vinnyl, Вы писали:

V>Здравствуйте Курилка,


V>Я в диалоговое окно добавил Slider, как теперь в главной программе получить его значение?


V>Заранее спасибо.


Очень советую поставить МСДН(думаю в Москве найти его не проблема), но можно и онлайн, если у тебя инет быстрый и дешёвый, конкретно по трекбара вот этот раздел. Все обычные элементы управления рулятся через сообщения. Сначала надо получить хендл элемента:

HWND hTBar = ::GetDlgItem(hDlg, IDC_MYTRACKBAR);


затем я бы посоветовал в WM_INITDIALOG указать диапазон:


::SendMessage(hTBar, TBM_SETRANGE, (WPARAM)TRUE, LPARAM) MAKELONG (0, 1000)); //к примеру


ну а где надо получить значение:

Pos = SendMessage( hTBar, TBM_GETPOS, 0, 0);


Другое дело, что этот код плохо читабелен, в связи с чем я бы посоветовал тебе WTL(смотри хотя бы статьи на этом сайте), там соответственно выглядело бы это так (многое упущено — реализация самого диалога и т.д.):

CDlg{
//
 CTrackBarCtrl m_TBar;
}


CDlg:OnInitDlg(...){
 ...
 m_TBar.Attach(GetDlgItem(IDC_MYTRACKBAR));
 ...
 m_TBar.SetRange(0, 1000, TRUE);
 ...
}

...
pos = m_TBar.GetPos();
...


Выглядит похоже несколько на MFC, но засчёт шаблонов в итоге получается код, не намного превышающий чистый WinAPI, но зато гораздо более стройный.
Хотя, хозяин — барин.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.