Лажа С Enumchildwindows

  • Автор темы Slawutich
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

Slawutich

Гость
#1
Вот такой у меня код

Код:
BOOL CALLBACK CClickDlg::MyEnumChildProc(HWND hwnd, LPARAM lParam)
{
CWnd *h;
CString str;
h=(CWnd *)hwnd;
h->GetWindowText(str);
m_List.AddString(str);
GetClassName(hwnd,(LPWSTR)&str,MAX_PATH);
m_List.AddString(str);
return 1;
}

void CClickDlg::OnBnClickedButton1()
{

CWnd *hWnd;
hWnd=FindWindow(_T("IEFrame"),NULL);

for(int i=0;i<5;i++)
{
EnumChildWindows((HWND)hWnd, MyEnumChildProc, NULL);
}

}
а компилятор мне пишет вот это
error C3867: 'CClickDlg::MyEnumChildProc': function call missing argument list; use
'&CClickDlg::MyEnumChildProc' to create a pointer to member

Подскажите плз чо не правильно
 
Z

zubr

Гость
#2
Функция MyEnumChildProc должна быть статической или просто глобальной.
 
S

Slawutich

Гость
#3
Вот так я объявил функцию в классе

Код:
static BOOL CALLBACK MyEnumChildProc(HWND hwnd, LPARAM lParam);
И вот так переписал фунуцию
Код:
BOOL CALLBACK CClickDlg::MyEnumChildProc(HWND hwnd, LPARAM lParam)
{
CWnd *ChildWnd, *DialogWnd;
CListBox *LB;
CString str;

DialogWnd=(CDialog *)lParam;
LB=(CListBox *)DialogWnd->GetDlgItem(IDC_LIST1);
ChildWnd=(CWnd *)hwnd;

ChildWnd->GetWindowText(str);
LB->AddString(str);

GetClassName(hwnd,(LPWSTR)&str,MAX_PATH);
LB->AddString(str);

return 1;
}
void CClickDlg::OnBnClickedButton1()
{

CWnd *hWnd;
hWnd=FindWindow(_T("IEFrame"),NULL);

for(int i=0;i<5;i++)
{
EnumChildWindows((HWND)hWnd, MyEnumChildProc, (LPARAM)m_hWnd);

}
}
Ошибка пропала, компилируется нормально но при ваполнении в функцию MyEnumChildProc
не заходит и соответственно не чо в листбокс не выводит а тут что не так? Подскажите пожалуйста.
 
M

mms

Гость
#4
hWnd=FindWindow(_T("IEFrame"),NULL); - тут случаем не нул возвращается?
 
S

Slawutich

Гость
#5
hWnd=FindWindow(_T("IEFrame"),NULL); - тут случаем не нул возвращается?
Нет потому что делаю так все работает окно сворачивается
Код:
hWnd=FindWindow(_T("IEFrame"),NULL);
hWnd->CloseWindow();
 
S

Slawutich

Гость
#6
Уххх Блин наконецтаки разобрался действительно проблемма была из за передаваемого хендла
но возникла еще одна проблема нашел значит нужное дочернее окно и посылаю сообщение
Код:
::PostMessage(hwnd,WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(760,527-112));

::PostMessage(hwnd,WM_LBUTTONUP,0000, MAKELPARAM(760,527-112));
В окне кнопка, по котороя я и хочу кликнуть мышкой, но кнопка только на мгновенье выделилась буд-то я на нее навел курсором мыши и не нажалась.

Что не так? Подскажите плз как правильно послать сообщение о клике мыши?
 
Z

zubr

Гость
#7
Попробуй вместо ::PostMessage(hwnd,WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(760,527-112));

::PostMessage(hwnd,WM_LBUTTONUP,0000, MAKELPARAM(760,527-112));


::SendMessage(hwnd,WM_LBUTTONDOWN, 0, 0);

::SendMessage(hwnd,WM_LBUTTONUP,0, 0);
 
S

Slawutich

Гость
#8
Попробуй вместо ::PostMessage(hwnd,WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(760,527-112));

::PostMessage(hwnd,WM_LBUTTONUP,0000, MAKELPARAM(760,527-112));


::SendMessage(hwnd,WM_LBUTTONDOWN, 0, 0);

::SendMessage(hwnd,WM_LBUTTONUP,0, 0);
Нет не работает, к томуже не указаны координаты куда иммено в окне кликнуть, а это имеет значение.

Проверял я Spy++ -ем какие сообщения получает окно, так вот мое посылаемое сообщение идентично с реальным кликом, я вот думаю может просто надо еще какието сообщения передать
 
S

Slawutich

Гость
#9
Все, всем спасибо, :D наконецтаки разобрался, дело в том что во флэшке где кнопка находится по которой хочу кликнуть есть свой курсор (внутренний) и просто перед кликом необходимо было послать сообшение WM_MOUSEMOVE с координатами расположения кнопки и только потом кликать
Все так бонально оказалось :(
 
Статус
Закрыто для дальнейших ответов.