Avatar billede baltazar_ Nybegynder
27. januar 2003 - 20:13 Der er 13 kommentarer

getCursorpos() ?

Er der nogle der har et eksempel på en dialog med et cleint area hvor cursor position vises når den er inde i client area,
Jeg har prøvet at få det til at funke men jeg fatter ikke rigtigt brugen af GetCursoPos() funktinen. Så et eksempel med lidt komentarer til hvad det forskellige gør ville gøre mig til en lykkens pam jule fis
Avatar billede baltazar_ Nybegynder
27. januar 2003 - 20:27 #1
glemte lige at sige at jeg skal bruge det i en class.
Avatar billede doctorseb Nybegynder
27. januar 2003 - 22:04 #2
Hvilken compiler?
Det hurtige svar er, at reagere på WM_MOUSEMOVE og blæse dennes koordinater ud på skærmen (og dermed glemme alt om GetCursorPos())
Avatar billede baltazar_ Nybegynder
28. januar 2003 - 00:07 #3
vc6++    Ja men jeg skal bruge det til at gemme oplysninger senere i forskellige funktioner
Avatar billede jpk Nybegynder
28. januar 2003 - 08:47 #4
Du bruger VC++, ikke?

Højreklik->ClassWizard, I listen med messages, markér WM_MOUSEMOVE og klik "Add Function" og så OK.

Det genererer en funktion med signaturen:
void OnMouseMove(UINT nFlags, CPoint point)
hvor point indeholder skærm-koordinaterne på musemarkørens position
Avatar billede baltazar_ Nybegynder
28. januar 2003 - 15:04 #5
smart. det prøver jeg da lige
Avatar billede baltazar_ Nybegynder
01. februar 2003 - 12:04 #6
ok fik den til at vise cursor positionen, men den viser det for hele dialog vinduet hvordan kan man få den til at kun visse for et bestemt frame nogle forslag ?
Avatar billede jpk Nybegynder
01. februar 2003 - 15:05 #7
Hvis du memer for en bestemt kontrol, kan du lave en membervariabel af typen Control, for kontrollen. Lad os fx sige du kalder den m_Map, så kan du gøre således:

void CYourDlg::OnMouseMove(UINT nFlags, CPoint point)
{
  CRect rect;
  m_Map.GetWindowRect(&rect);
  ScreenToClient(rect);
  if(rect.PtInRect(point))
    m_Position.Format("x=%d, y=%d", rect.left-point.x, rect.top-point.y);
  else
    m_Position = "";
  UpdateData(false);
}
Avatar billede baltazar_ Nybegynder
01. februar 2003 - 15:42 #8
m_Position ville kræve en struct  ikke ?

kan man lave den så simpel, eller skal der mere til

    struct m_Position
    {
        int x;
        int y;
        }
Avatar billede baltazar_ Nybegynder
01. februar 2003 - 16:27 #9
den kommer med denne fejl

error C2228: left of '.format' must have class/struct/union type


fra denne linie:

m_Position.format("x=%d, y=%d", rect.left-point.x, rect.top-point.y);
Avatar billede jpk Nybegynder
02. februar 2003 - 12:13 #10
m_Position er blot en membervariable af typen CString...
Avatar billede baltazar_ Nybegynder
02. februar 2003 - 21:18 #11
Ja men jeg forstår ikke rigtigt at den komemr med fejl her,  hvad tror du jeg mangler

error C2228: left of '.Format' must have class/struct/union type

i linien
m_Position.format("x=%d, y=%d", rect.left-point.x, rect.top-point.y);
jeg har initialiseret m_position som Char* da den ikke vil godtage int
Avatar billede jpk Nybegynder
03. februar 2003 - 08:41 #12
Du kan fx indsætte en edit control til at vide koordinaterne i. Den kan du så lave en membervariable af typen CString til, fx m_Position.
Du kan så gøre som i koden ovenfor.
Det er analogt til at gøre sådan:

void CYourDlg::OnMouseMove(UINT nFlags, CPoint point)
{
  CString strPosition;
  CRect rect;
  m_Map.GetWindowRect(&rect);
  ScreenToClient(rect);
  if(rect.PtInRect(point))
    strPosition.Format("x=%d, y=%d", rect.left-point.x, rect.top-point.y);
  else
    strPosition = "";
}

Bortset fra det her er en lokal variable der arbejdes på...
Avatar billede baltazar_ Nybegynder
03. februar 2003 - 22:22 #13
Så fik jeg det til at virke, tusinde tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester