Подскажите пожалуйста, как в Visual C++ 6.0 вызвать диалоговое окно, по описанному в редакторе ресурсов шаблону? Я не хочу пользоваться MFC, как обойтись только WinApi не прибегая к классам диалоговых окон и т.д.
Здравствуйте Vinnyl, Вы писали:
V>Подскажите пожалуйста, как в Visual C++ 6.0 вызвать диалоговое окно, по описанному в редакторе ресурсов шаблону? Я не хочу пользоваться MFC, как обойтись только WinApi не прибегая к классам диалоговых окон и т.д. 
CreateDialog
DialogBox
Здравствуйте Vinnyl, Вы писали:
V>Подскажите пожалуйста, как в Visual C++ 6.0 вызвать диалоговое окно, по описанному в редакторе ресурсов шаблону? Я не хочу пользоваться MFC, как обойтись только WinApi не прибегая к классам диалоговых окон и т.д.
Вот
тут есть готовый, но немного перегруженный пример.
Здравствуйте 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, которая будет все мессаги обрабатывать (смотри там же, не буду форум захламлять), если есть ещё вопросы — пиши.
Здравствуйте 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;
}
Если немодальный — Курилка написал всё, что надо.
Здравствуйте 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, но зато гораздо более стройный.
Хотя, хозяин — барин.