Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Дочернее окно в другом приложении, WinAPI 
:(
    Опции темы
GremlinProg
Дата 19.4.2012, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(Qwe2 @  19.4.2012,  17:40 Найти цитируемый пост)
Может быть из-за того, что после создания подсказки я сразу же выхожу из функции, которая вызывается из dll (FuncMy())?

нет, скорее всего из-за того, что не вызываешь InitCommonControls


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Qwe2
Дата 19.4.2012, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 23.3.2008

Репутация: нет
Всего: нет



Вот код, почему не работает не знаю... Я так понял, что этим мы говорим системе, что при наведении мышки на элемент с указанным хэндлом надо показывать подсказку. А можно ее просто вывести один раз на заданное число секунд и все, потом она уже не нужна...
Код

#include <windows.h>
#include <commctrl.h>
#pragma comment (lib, "comctl32.lib")

HINSTANCE hInstance;
void CreateHint(HWND, LPSTR);

//
BOOL WINAPI DllMain(HINSTANCE hInst, DWORD, LPVOID)
{
    hInstance = hInst;
    return 1;
}

//
extern "C" __declspec(dllexport) int FuncMy(HWND hWnd, LPCSTR sMess)
{ 
    CreateHint(hWnd,"Bla-bla-bla...");
    return 0;
}

//
void CreateHint(HWND hwnd,char* strTT)
{
    HWND hwndTT;
    TOOLINFO ti;
    unsigned int uid = 0;
    RECT rect;
    InitCommonControls();    
    hwndTT = CreateWindowEx(WS_EX_TOPMOST,TOOLTIPS_CLASS,
        NULL,WS_POPUP | TTS_ALWAYSTIP,
        CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
        hwnd,NULL,hInstance,NULL);
     SetWindowPos(hwndTT,HWND_TOPMOST,0,0,0,0,
        SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
    GetClientRect (hwnd, &rect);
    ti.cbSize = sizeof(TOOLINFO);
    ti.uFlags = TTF_SUBCLASS;
    ti.hwnd = hwnd;
    ti.hinst = hInstance;
    ti.uId = uid;
    ti.lpszText = strTT;
    ti.rect.left = rect.left;    
    ti.rect.top = rect.top;
    ti.rect.right = rect.right;
    ti.rect.bottom = rect.bottom;
    SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti); 
 }


PM MAIL   Вверх
feodorv
Дата 19.4.2012, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 9
Всего: 45



Цитата(Qwe2 @  19.4.2012,  17:20 Найти цитируемый пост)
InitCommonControls(); 


Код

 INITCOMMONCONTROLSEX ic;

  ZeroMemory( &ic, sizeof(INITCOMMONCONTROLSEX));
  ic.dwSize = sizeof(INITCOMMONCONTROLSEX);
  ic.dwICC = ICC_WIN95_CLASSES | ICC_BAR_CLASSES ;
  InitCommonControlsEx( &ic );

???


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Qwe2
Дата 19.4.2012, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 23.3.2008

Репутация: нет
Всего: нет



Проверяю по отладчику - все вроде ок, хэндлы не нулевые, структуры заполняются, но всплывающей подсказки не вижу...
PM MAIL   Вверх
GremlinProg
Дата 20.4.2012, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



а посмотри ву Spy, кто такой hWnd из FuncMy, где его координаты и видим ли он вообще )


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Qwe2
Дата 20.4.2012, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 23.3.2008

Репутация: нет
Всего: нет



Добавил точно видимый хэндл, где tooltip? ) Когда к EditBox'у или кнопке подводишь мышь она всплывает (привычное поведение), а что мы сейчас пытаемся сделать? Она должна всплыть прямо в окне? При наведении мыши или?
Код

hWnd = FindWindow(NULL, "Калькулятор");

PM MAIL   Вверх
GremlinProg
Дата 20.4.2012, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(Qwe2 @  19.4.2012,  18:20 Найти цитируемый пост)
Вот код, почему не работает не знаю... Я так понял, что этим мы говорим системе, что при наведении мышки на элемент с указанным хэндлом надо показывать подсказку. 

пока мы можем только гадать, что это за приложение,
подозреваю, что FuncMy вызывается, когда основное окно еще не видимо, т.е. без его сабклассинга будет проблематично что-либо сделать

подмени процедуру окна, поймай что-нить на WM_NCHITTEST, например:
Код

...
case WM_NCHITTEST:
  Result = RealWndProc( hwnd, uMsg, wParam, lParam );
  if( Result == HTCAPTION ){
    static BOOL Once = TRUE;
    if( Once ){
      Once = FALSE;
      CreateHint( ... );
    }
  }
  return Result;
...



--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Dem_max
Дата 20.4.2012, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



Цитата(Qwe2 @ 19.4.2012,  12:46)
Есть приложение, к нему можно подключать сторонние dll. Я создал такую dll и в ней сделал модальное диалоговое окна с помощью DialogBox. Все работает. А можно таким же образом создать немодальное окно: чтобы оно висело (хочу поместить туда некий текст с картинкой), а программа дальше бы работала. Просто DialogBox как ему и положено блокирует работу приложения до закрытия диалога...

С диалогом такого не сделаешь, но вот с обычным окном без проблем, будет отображаться параллельно с главным окном.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
GremlinProg
Дата 20.4.2012, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(Dem_max @  20.4.2012,  15:14 Найти цитируемый пост)
С диалогом такого не сделаешь, но вот с обычным окном без проблем, будет отображаться параллельно с главным окном.

диалог - это обычное окно  smile 


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Dem_max
Дата 20.4.2012, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



хотя да, ошибся, нужно только создать дополнительный поток и туда переместить весь код с выборкой сообщений.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
GremlinProg
Дата 20.4.2012, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(Dem_max @  20.4.2012,  15:43 Найти цитируемый пост)
хотя да, ошибся, нужно только создать дополнительный поток и туда переместить весь код с выборкой сообщений.

ага, можно и так


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Qwe2
Дата 23.4.2012, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 23.3.2008

Репутация: нет
Всего: нет



Цитата

нужно только создать дополнительный поток и туда переместить весь код с выборкой сообщений.

Так как это будет выглядеть? Поток создавать CreateThread в FuncMy() и как узнать его завершения?

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0749 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.