Как я могу создавать всплывающие подсказки?

Я пытаюсь создать несколько советов, используя в своем приложении интерфейс типа "воздушный шарик", чтобы пользователи могли видеть информацию об определенных действиях, которые необходимо предпринять в определенных ситуациях, но отстойные коды, которые я просматривал на форуме. Один из примеров подсказок, которые я нашел, находится на следующем сайте 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;
Другие вопросы по тегам