Как я могу создавать всплывающие подсказки?
Я пытаюсь создать несколько советов, используя в своем приложении интерфейс типа "воздушный шарик", чтобы пользователи могли видеть информацию об определенных действиях, которые необходимо предпринять в определенных ситуациях, но отстойные коды, которые я просматривал на форуме. Один из примеров подсказок, которые я нашел, находится на следующем сайте http://www.tek-tips.com/viewthread.cfm?qid=1611641. Я думаю, что он был создан в C++ Builder 2009 IDE и пытался скомпилировать его с помощью C Builder 2010 IDE RS, но я не смог получить подсказки. Во-первых, когда я компилировал, он останавливался на следующей строке, такой какGetClientRect(hWnd, &ti.rect);
Затем я изменил его на GetWindowRect, потому что GetClientRect
не требует передачи каких-либо параметров этому методу, хотя я изменил clint-to-window, затем я наконец запустил его... думал, что он покажет подсказки, но никаких подсказок.
Кроме того, я представил код, на который я дал ссылку.
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
typedef struct{
unsigned long cbStruct;
PWChar pszTitle;
PWChar pszText;
int ttiIcon;
} tagEDITBALLOONTIP;
tagEDITBALLOONTIP *EDITHINT;
void __fastcall TForm1::ShowBalloonTip(TWinControl *Control,int Icon,char *Title,char *Text,TColor BackCL,TColor TextCL)
{
HWND hWndTip;
TOOLINFO ti;
HWND hWnd;
hWnd = Control->Handle;
hWndTip = CreateWindow(TOOLTIPS_CLASS, NULL, WS_POPUP | TTS_NOPREFIX | TTS_BALLOON | TTS_ALWAYSTIP, 0, 0, 0, 0, hWnd, 0, HInstance, NULL);
if( hWndTip )
{
SetWindowPos(hWndTip, HWND_TOPMOST, 0, 0, 0, 0,
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
ti.cbSize = sizeof(ti);
ti.uFlags = TTF_CENTERTIP | TTF_TRANSPARENT | TTF_SUBCLASS;
ti.hwnd = hWnd;
ti.lpszText = Text;
GetClientRect(hWnd, &ti.rect); // the only problem is here
SendMessage(hWndTip, TTM_SETTIPBKCOLOR, BackCL, 0);
SendMessage(hWndTip, TTM_SETTIPTEXTCOLOR, TextCL, 0);
SendMessage(hWndTip, TTM_ADDTOOL, 1, Integer(&ti));
SendMessage(hWndTip, TTM_SETTITLE, Icon % 4, Integer(Title));
}
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowBalloonTip(Button1, 1, "ik0","Example on how to create Balloon Tips in C++ Builder", ColorBox1->Selected,ColorBox2->Selected );
}`
тогда я спрашиваю, как заставить его работать в IDE Builder 2010??? Интересно, почему он работал в IDE 2009 с помощью таких функций Windows API, как GetClientRect()
это предоставило 2 параметра, и когда я компилировал его в C Builder 2010 IDE в Windows 7, он сказал, что никаких параметров не ожидается...
1 ответ
Вы пытаетесь вызвать Win32 API GetClientRect()
функция изнутри TForm
метод. поскольку TForm
наследует отдельный GetClientRect()
метод из TControl
Вы должны указать компилятору, какой из них вызывать. Укажите глобальное пространство имен, если вы хотите вызывать функцию Win32 API, а не TControl::GetClientRect()
метод, например:
::GetClientRect(hWnd, &ti.rect);
С другой стороны, так как HWND исходит от TWinControl
Вы можете (и должны) использовать элементы управления ClientRect
свойство вместо:
ti.rect = Control->ClientRect;