Лажа С Enumchildwindows

Тема в разделе "MS Visual C++", создана пользователем Slawutich, 17 июл 2007.

Статус темы:
Закрыта.
  1. Slawutich

    Slawutich Гость

    Вот такой у меня код

    Код (Text):
    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

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

    zubr Гость

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

    Slawutich Гость

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

    Код (Text):
    static BOOL CALLBACK MyEnumChildProc(HWND hwnd, LPARAM lParam);
    И вот так переписал фунуцию
    Код (Text):
    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
    не заходит и соответственно не чо в листбокс не выводит а тут что не так? Подскажите пожалуйста.
     
  4. mms

    mms Гость

    hWnd=FindWindow(_T("IEFrame"),NULL); - тут случаем не нул возвращается?
     
  5. Slawutich

    Slawutich Гость

    Нет потому что делаю так все работает окно сворачивается
    Код (Text):
    hWnd=FindWindow(_T("IEFrame"),NULL);
    hWnd->CloseWindow();
     
  6. Slawutich

    Slawutich Гость

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

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

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

    zubr Гость

    Попробуй вместо ::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);
     
  8. Slawutich

    Slawutich Гость

    Нет не работает, к томуже не указаны координаты куда иммено в окне кликнуть, а это имеет значение.

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

    Slawutich Гость

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

Поделиться этой страницей