Консультация № 140230
18.07.2008, 21:42
0.00 руб.
0 0 0
Создаю тултип для кнопки диалога, но он не отображается при наведении на кнопку курсора мыши.

Приложение:
.386.model flat,stdcallinclude \masm32\include\windows.incinclude \masm32\include\kernel32.incinclude \masm32\include\user32.incinclude \masm32\include\gdi32.incinclude \masm32\include\comctl32.incincludelib \masm32\lib\kernel32.libincludelib \masm32\lib\user32.libincludelib \masm32\lib\gdi32.libincludelib \masm32\lib\comctl32.libIDD_DLG1 equ 1000IDC_BTN1 equ 1001.data?handle_instance DD ? ;дескриптор экземпляра приложенияhandle_main_window DD ?handle_dialog DD ?process_message MSG <?>handle_tooltip DD ?ti TOOLINFO <?>.datamain_window_class WNDCLASSEX <TYPE WNDCLASSEX,CS_HREDRAW or CS_VREDRAW,OFFSET MainWindowProc,0,0,,,,,,OFFSET main_window_class_name,>main_window_class_name DB ‘Приложение Win32‘,0main_window_name DB ‘main_window‘,0tooltip_class_name DB ‘tooltips_class32‘,0tt_text DB ‘:p‘,0.codeDialogProc PROC @@hwnd_dlg:DWORD, @@message:DWORD, @@wParam:DWORD, @@lParam:DWORD cmp @@message,WM_MOUSEMOVE je @@wmmousemove xor eax,eax ret@@wmmousemove: invoke SendMessageA, handle_tooltip,TTM_RELAYEVENT,0,addr process_message mov eax,1 retDialogProc ENDPstart:call InitCommonControlsinvoke GetModuleHandleA, 0mov handle_instance,eaxmov main_window_class.hInstance,eaxinvoke LoadCursorA, 0,IDC_ARROWmov main_window_class.hCursor,eaxinvoke GetStockObject, LTGRAY_BRUSHmov main_window_class.hbrBackground,eaxinvoke RegisterClassExA, OFFSET main_window_classtest ax,axjz exitinvoke CreateWindowExA, 0,OFFSET main_window_class_name,OFFSET main_window_name,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,400,300,0,0,handle_instance,0mov handle_main_window,eax;создать диалогinvoke CreateDialogParamA, handle_instance,IDD_DLG1,handle_main_window,addr DialogProc,0mov handle_dialog,eax;получить хендл кнопки диалогаinvoke GetDlgItem, handle_dialog,IDC_BTN1mov ti.TOOLINFO.cbSize,TYPE TOOLINFOmov ti.TOOLINFO.uFlags,0mov ti.TOOLINFO.hWnd,eaxmov ti.TOOLINFO.uId,1mov ti.TOOLINFO.rect.RECT.left,0mov ti.TOOLINFO.rect.RECT.top,0mov ti.TOOLINFO.rect.RECT.right,39mov ti.TOOLINFO.rect.RECT.bottom,39mov ti.TOOLINFO.hInst,0mov ti.TOOLINFO.lpszText,OFFSET tt_textmov ti.TOOLINFO.lParam,0;создать tooltipinvoke CreateWindowExA, WS_EX_TOPMOST,OFFSET tooltip_class_name,0,WS_POPUP or WS_CHILD,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,eax,0,0,0mov handle_tooltip,eax;создать активный прямоугольник тултипаinvoke SendMessageA, handle_tooltip,TTM_ADDTOOL,0,OFFSET tiinvoke ShowWindow, handle_main_window,SW_SHOWNORMALmessage_loop: invoke GetMessageA, addr process_message,0,0,0 cmp ax,0 je exit invoke IsDialogMessage, handle_dialog,addr process_message test eax,eax jnz message_loop invoke TranslateMessage, addr process_message invoke DispatchMessageA, addr process_message jmp message_loopexit: invoke ExitProcess, 0 ;-------------------MainWindowProc-----------------------MainWindowProc PROC @@hwnd:DWORD, @@mes:DWORD, @@wparam:DWORD, @@lparam:DWORD cmp @@mes,WM_DESTROY je wmdestroydefault: invoke DefWindowProcA, @@hwnd,@@mes,@@wparam,@@lparam retwmdestroy: invoke PostQuitMessage, 0 xor eax,eax retMainWindowProc ENDPEND start-----------------------------------------------------------файл ресурсов-----------------------------------------------------------#define IDD_DLG1 1000#define IDC_BTN1 1001#include "win_consts.h"IDD_DLG1 DIALOGEX 0,0,161,121FONT 8,"MS Sans Serif",0,0,0STYLE WS_CHILD|WS_VISIBLE|WS_BORDERBEGIN CONTROL "lala",IDC_BTN1,"Button",WS_CHILD|WS_VISIBLE,66,36,40,40END

Обсуждение

Форма ответа