AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [MASM] GetClientRect funktioniert nicht richtig
Thema durchsuchen
Ansicht
Themen-Optionen

[MASM] GetClientRect funktioniert nicht richtig

Ein Thema von ferby · begonnen am 13. Feb 2009 · letzter Beitrag vom 14. Feb 2009
 
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#1

[MASM] GetClientRect funktioniert nicht richtig

  Alt 13. Feb 2009, 23:18
Hallo,

also ich bin mit meinem Latein am Ende,
ich habe ein Fenster + einen Button in MASM erstellt.

Jetzt will ich die Größe & Position des Buttons auslesen.

Dafür gibt es die API Funktion GetClientRect.
GetClientRect Function
RECT Structure

Das komische ist: Breite und Höhe werden richtig zurückgegeben, aber Left und Top nicht und ich habe leider keine Ahnung warum (Beides ist 0).

Hat wer vielleicht Rat?

Code:
.386
.model flat,stdcall
option casemap:none

include C:\masm32\include\windows.inc
include C:\masm32\include\user32.inc
include C:\masm32\include\kernel32.inc
includelib C:\masm32\lib\user32.lib
includelib C:\masm32\lib\kernel32.lib

.data?
hInstance HINSTANCE ?
h_window HWND ?
h_button HWND ?

.data
AppNameDefault db "FD3",0

; Classen Namen
btnClass db "BUTTON",0

.code
START:

Window proc
   LOCAL wc:WNDCLASSEX
   LOCAL msg:MSG
   LOCAL CoordRect: RECT

   invoke GetModuleHandleA, NULL
   mov hInstance,eax
   mov  wc.cbSize,SIZEOF WNDCLASSEX
   mov  wc.style, CS_HREDRAW or CS_VREDRAW
   mov  wc.lpfnWndProc, OFFSET EVENTS
   mov  wc.cbClsExtra,NULL
   mov  wc.cbWndExtra,NULL
   push hInstance
   pop  wc.hInstance
   mov  wc.hbrBackground,COLOR_BTNFACE + 1
   mov  wc.lpszMenuName,NULL
   mov  wc.lpszClassName,OFFSET AppNameDefault
   invoke LoadIconA,hInstance,500
   mov  wc.hIcon,eax
   mov  wc.hIconSm,eax
   invoke LoadCursorA,NULL,IDC_ARROW
   mov  wc.hCursor,eax
   invoke RegisterClassExA, addr wc

   INVOKE CreateWindowExA, NULL, ADDR AppNameDefault, ADDR AppNameDefault,
           WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600,
           NULL, NULL, hInstance, NULL
   mov  h_window,eax

   INVOKE ShowWindow, h_window, SW_SHOW
   INVOKE UpdateWindow, h_window

   ; ERSTELLE BUTTON
   invoke CreateWindowExA, NULL, ADDR btnClass, NULL, WS_CHILD or WS_VISIBLE, 150, 150, 150, 150, h_window, ebx, hInstance, NULL
    mov h_button, eax
    

   invoke GetClientRect, h_button, ADDR(CoordRect)
   
   ;cmp CoordRect.bottom,0 --> Richtig!
   cmp CoordRect.left,0 ;--> why NULL???
   
   je @exit_program
    
   @infinite_loop:

                INVOKE GetMessageA, ADDR msg, NULL, 0, 0

                ; falls Benutzer Fenster schließt
                cmp eax, 0
                je @exit_program

                INVOKE TranslateMessage, ADDR msg
                INVOKE DispatchMessageA, ADDR msg

   
   jmp @infinite_loop

   @exit_program:
   invoke ExitProcess, 0
   Window ENDP

EVENTS PROC hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
   invoke DefWindowProc,hWnd,uMsg,wParam,lParam
   ret
EVENTS ENDP

END START
Danke,
Ferby
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz