Проблема с созданием ToolTip'а в dll
От: _Cool-  
Дата: 28.08.09 08:09
Оценка:
Пробую сделать тултип. Когда делаю в основной ехешке — то все отлично работает, но когда пытаюсь сделать тоже самое в длл, SendMessage TTM_ADDTOOL все время возвращает false. Что не так?

HWND hToolTip = NULL;
hGlobalModule hModule = NULL;

BOOL APIENTRY DllMain( HMODULE hModule,DWORD  ul_reason_for_call,LPVOID lpReserved)
{
  switch (ul_reason_for_call)
  {
     case DLL_PROCESS_ATTACH:
     {
           hGlobalModule = hModule;
    
        WNDCLASS popupcl;
        memset(&popupcl, 0, sizeof(popupcl));
        popupcl.lpszClassName = POPUPCLASS;
        popupcl.lpfnWndProc = (WNDPROC)WinPopupProc;
        popupcl.hInstance = hGlobalModule;
        popupcl.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
        popupcl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
        popupcl.hCursor = LoadCursor(NULL, IDC_ARROW);
        popupcl.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
        ATOM retpopup = RegisterClass(&popupcl);

        hThread = CreateThread( NULL,                   // default security attributes
                    0,                      // use default stack size  
                    ThreadMessages,         // thread function name
                    NULL,                   // argument to thread function 
                    0,                      // use default creation flags 
                    &dwThreadId);           // returns the thread identifier 
        }
        break;
     }
.......................
}

DWORD WINAPI ThreadMessages( LPVOID lpParam ) 
{
    hPopupInfo = CreateWindowEx(    WS_EX_TOPMOST,
                            POPUPCLASS,
                            L"popapchik",
                            WS_POPUP | WS_VISIBLE,
                            50, 50,
                            100, 100,
                            NULL,
                            (HMENU)NULL,
                            hGlobalModule,
                            NULL);
    if(hPopupInfo) ShowWindow(hPopupInfo, SW_SHOW);

    hToolTip = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, NULL,
                TTS_ALWAYSTIP,
                CW_USEDEFAULT, CW_USEDEFAULT,
                CW_USEDEFAULT, CW_USEDEFAULT,
                hPopupInfo, 0, hGlobalModule, NULL );

    MSG msg;
    while (GetMessage( &msg, NULL, 0, 0 ))
    {
        if (msg.message==WM_QUIT)  
            break;
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}

LRESULT CALLBACK WinPopupProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
      case WM_LBUTTONUP:
        {
            TOOLINFO tooltip = {0};
            tooltip.cbSize = sizeof(TOOLINFO);
            tooltip.uFlags = TTF_SUBCLASS;
            tooltip.hinst = hGlobalModule;
            tooltip.uId = 0;
            tooltip.hwnd = hWnd;
            tooltip.lpszText = L"tooltip";
            tooltip.rect.right = 50;
            tooltip.rect.bottom = 50;

            if (SendMessage(hToolTip, TTM_ADDTOOL, 0, LPARAM(&tooltip)) != TRUE)
                Logger::Log("Error add tooltip\n");      //////!!!!!!!!Всегда возвращается ошибка!!!
        }
            break;
    }
    return DefWindowProc(hWnd, msg, wParam, lParam);
}
Re: Проблема с созданием ToolTip'а в dll
От: Сергей Мухин Россия  
Дата: 28.08.09 08:15
Оценка:
Здравствуйте, _Cool-, Вы писали:

_C>Пробую сделать тултип. Когда делаю в основной ехешке — то все отлично работает, но когда пытаюсь сделать тоже самое в длл, SendMessage TTM_ADDTOOL все время возвращает false. Что не так?


Мне казалось, что в DLL_PROCESS_ATTACH нельзя создавать thread. Да и много чего еще.
---
С уважением,
Сергей Мухин
Re[2]: Проблема с созданием ToolTip'а в dll
От: _Cool-  
Дата: 28.08.09 08:29
Оценка:
СМ>Мне казалось, что в DLL_PROCESS_ATTACH нельзя создавать thread. Да и много чего еще.
С чего это нельзя? И создает, и отображает и вообще нормально все работает — ну кроме тултипа :)
Re[3]: Проблема с созданием ToolTip'а в dll
От: Сергей Мухин Россия  
Дата: 28.08.09 08:32
Оценка:
Здравствуйте, _Cool-, Вы писали:

СМ>>Мне казалось, что в DLL_PROCESS_ATTACH нельзя создавать thread. Да и много чего еще.

_C>С чего это нельзя? И создает, и отображает и вообще нормально все работает — ну кроме тултипа

ну мне кажется это все знают.

здесь
---
С уважением,
Сергей Мухин
Re[4]: Проблема с созданием ToolTip'а в dll
От: _Cool-  
Дата: 28.08.09 08:40
Оценка:
СМ>ну мне кажется это все знают.
СМ>здесь

Ну не важно — в данном случае работает все корректно. HWND все правильные, окна создаются — мессаги обрабатываются. Первоначально тултип я создавал в другом месте — проблема была та же.
Re[4]: Проблема с созданием ToolTip'а в dll
От: Аноним  
Дата: 28.08.09 09:11
Оценка:
К тому же вроде никаких проблем при создании потока в dllmain'е нету — просто он запустится после того как эта функция отработает — что вполне меня устраивает.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.