Привет!
PP>Как получить дескриптор диалогого окна зная его ID или
PP>Как получить ID диалогого окна зная его дескриптор исползуя WIN API функции
HWND from IDD? Диалог должен быть запущен (
CreateDialogParam), тогда ты из ресурсной заготовки сделаешь окно — вот тебе и дескриптор.
Диалог уже запущен? Тогда ты зная hwnd можешь получить доступ к допольнительной инфе с помощью:
LONG GetWindowLong(
HWND hWnd, // handle of window
int nIndex // offset of value to retrieve
);
Например, для nIndex=GWL_ID, ты можешь узнать ID, если твое окно — дочернее.
Если же ты имеешь в виду контрол диалога, то:
HWND GetDlgItem(
HWND hDlg, // handle of dialog box
int nIDDlgItem // identifier of control
);
и наоборот:
HWND GetDlgItem(
HWND hDlg, // handle of dialog box
int nIDDlgItem // identifier of control
);
Это сообственно все из винАпи..
И тут я задумался..

Кажется, ты хочешь для кучи диалогов хранить только одну переменную, которая будет определять его однозначно, да? А потом какая-нибудь функция будет по этой переменной все определять? А разве недостаточно одного хэндла?..
S>Это сообственно все из винАпи..
S>И тут я задумался..
Кажется, ты хочешь для кучи диалогов хранить только одну переменную, которая будет определять его однозначно, да? А потом какая-нибудь функция будет по этой переменной все определять? А разве недостаточно одного хэндла?..
Вот имено! это все знаю. А именно не зная хэндла диалога зная толка ID получить хэндла. C GetWindowLong все ясно.
Здравствуйте, Paata Pheikrishvili, Вы писали:
PP>Вот имено! это все знаю. А именно не зная хэндла диалога зная толка ID получить хэндла. C GetWindowLong все ясно.
ID — это идентификатор Template — а. По темплейту можно создать хоть сто Dialog-ов. Следовательно по ID получить HWND нельзя...

Но просто его получить прямо в обработчике диалога, при каждом запуске он получает hwnd(hDlg) и.т.д. К слову в WM_INITDIALOG напиши чтото типа : hWnd = hDlg, где hWnd — глобальный указатель, а hDlg — локальный