Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   CheckBox! Определение хэндла! (http://forum.oszone.net/showthread.php?t=184884)

LilLoco 07-09-2010 23:55 1490664

CheckBox! Определение хэндла!
 
Привет Всем! Появился такой вопрос! Есть форма, на ней есть несколько CheckBox(например 3), все они находятся, допустим, на панельке!Class всех CheckBox одинаков!При помощи функций FindWindow и FindWindowEx я нахожу хэндлы главного окна - > панельки - > а вот потом, как найти хэндл ,например, именно 2го CheckBox? Caption у всех пустой! Подскажите как выйти из этой ситуации...

Admiral 08-09-2010 23:28 1491395

LilLoco форма в своей программе или сторонней?
В своей ввести глобального переменные типа HWND и при создании CheckBox присвоить переменным дескрипторы последних.
Также не помешает присвоить идентификаторы CkeckBox'ам, если CheckBox'ы создаются непосредственно функцией CreateWindow(Ex), это третий параметр с конца.
Код:

enum CheckBoxIds {CheckBoxXId = 1, CheckBoxXId2, CheckBoxXId3};
//...
CreateWindow(
        TEXT("BUTTON"),
        NULL,
        WS_CHILD | WS_TABSTOP | BS_AUTOCHECKBOX,
        CW_USEDEFAULT, CW_USEDEFAULT,
        CW_USEDEFAULT, CW_USEDEFAULT,
        hWnd,
        (HMENU)CheckBoxXId,
        cs.hInstance,
        NULL);

Для чужой программы неплохо бы сначала натравить Microsoft Spy++ см. пост за Monday, November 16, 2009 6:06 PM от CookieRevised, а там видно будет - принадлежат чекбоксы именно панельки или глобально форме.
В первом случаи указывать FindWindowEx искать дальше в панельке дочерние окна, во втором отбросить что найдена панелька и искать дальше чекбоксы, такие же дочерние окна как и сама панелька у формы.

LilLoco 09-09-2010 07:44 1491528

Admiral, Приложение не свое, чужое! Как раз смотрел через Spy++, боксы принадлежат панельке, у боксов одинаковые Class, пустые Caption! Делал поиск через FindWindowEx, и при помощи SendMessage ставил галочку, но у меня срабатывало на последнем боксе, а нужно например на втором!

Sanchos 09-09-2010 15:59 1491820

h = GetDlgItem(hW, ID)
hW - хендл родителя.
ID - ID элемента, по идеи он у всех разный. Его можно узнать через Spy++

LilLoco 09-09-2010 22:25 1492091

Sanchos, Спасибо :) Завтра буду пробовать!

LilLoco 10-09-2010 08:11 1492291

Так, объясните мне пожалуйста,
Цитата:

Цитата Sanchos
ID - ID элемента, по идеи он у всех разный. Его можно узнать через Spy++ »

это в SPY++ Control ID?Если да, то многие ID равны по значению Хэндлу окна!Как быть тогда?

Sanchos 10-09-2010 20:00 1492696

А вы уверенны что то значение что там написано это хендл родительского окна? )))))
Я всегда использую h = GetDlgItem(hW, ID) и всё работает.

LilLoco 10-09-2010 20:56 1492721

Цитата:

Цитата Sanchos
А вы уверенны что то значение что там написано это хендл родительского окна? ))))) »

Я имею ввиду Хэндл Чекбокса имеет такое же значение что и его ID!

Sanchos 10-09-2010 22:57 1492764

ну и что? вам выполнить задачу нужно или что?
Напоминает:
- Это красный?
- да, это красный?
- а это точно он?
- да!
- а мне кажется это бардовый...

хотя палка иногда тоже стреляет ))))))))
в общем, для моих целей это работает, а уж как у вас будет .... )))

LilLoco 11-09-2010 14:37 1493068

Цитата:

Цитата Sanchos
ну и что? »

а то что, как и хендл так и его ID, где он такой же, меняется! И как тогда мне узнать ID? чтобы в параметры функции передать?Знаю похоже на какой то баг приложения, но поэтому и прошу помощи!


Время: 08:21.

Время: 08:21.
© OSzone.net 2001-