tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
1305
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    haribald haribald ist offline Rookie
    Registriert seit
    Jan 2005
    Beiträge
    7
    Hallo,

    Ich habe eine dringende und wahrscheinlich banale Frage, zu der ich leider keine Lösung bekomme. Ich habe das Problem mal heruntergebrochen, so dass der "Profi" wohl gleich sehen wird, was die Ursache ist.

    Ich habe 2 gleichwertige Fenster, wobei sich das eine schließen soll, wenn das andere geöffnet wird. In folgendem Beispiel soll sich das eine einfach schließen wenn Escape gedrückt wurde, während das andere allerdings geöffnet bleiben soll. Das bekomme ich leider einfach nicht hin. Es ist übrigens Absicht, das mit Fenstern lösen zu wollen (also keine Messagebox, oder Dialog Box)

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    
    [SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2] <windows.h>[/SIZE]
     
     
    [SIZE=2]LRESULT CALLBACK WindowProcedure(HWND hwnd,UINT msg,WPARAM [/SIZE]
     
    [SIZE=2]wparam,LPARAM lparam);[/SIZE]
    [SIZE=2]HWND awindow;[/SIZE]
    [SIZE=2]HWND bwindow;[/SIZE]
    [SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] Register(WNDCLASSEX WindowClass)[/SIZE]
    [SIZE=2]{[/SIZE]
    [SIZE=2] RECT DesktopSize;[/SIZE]
    [SIZE=2]   GetClientRect(GetDesktopWindow(),&DesktopSize);[/SIZE]
    [SIZE=2]   WindowClass.cbSize = [/SIZE][SIZE=2][COLOR=#0000ff]sizeof[/COLOR][/SIZE][SIZE=2](WNDCLASSEX);[/SIZE]
    [SIZE=2]   WindowClass.style = CS_HREDRAW | CS_VREDRAW;[/SIZE]
    [SIZE=2]   WindowClass.lpfnWndProc = WindowProcedure;[/SIZE]
    [SIZE=2]   WindowClass.cbClsExtra = 0;[/SIZE]
    [SIZE=2]   WindowClass.cbWndExtra = 0;[/SIZE]
    [SIZE=2]   WindowClass.hInstance = GetModuleHandle(NULL);[/SIZE]
    [SIZE=2]   WindowClass.hIcon = NULL;[/SIZE]
    [SIZE=2]   WindowClass.hCursor = NULL;[/SIZE]
    [SIZE=2]   WindowClass.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);[/SIZE]
    [SIZE=2]   WindowClass.lpszMenuName = NULL;[/SIZE]
    [SIZE=2]   WindowClass.lpszClassName = "ClassName";[/SIZE]
    [SIZE=2]   WindowClass.hIconSm = LoadIcon(NULL,IDI_APPLICATION);[/SIZE]
    [SIZE=2]   RegisterClassEx(&WindowClass);[/SIZE]
    [SIZE=2]}[/SIZE]
     
    [SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2] WINAPI WinMain( HINSTANCE hInstance, HINSTANCE PrevInstance, LPSTR Ipcmdline, [/SIZE][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2] cCmdShow)[/SIZE]
    [SIZE=2]{[/SIZE]
    [SIZE=2]MSG Message; [/SIZE]
    [SIZE=2]WNDCLASSEX WindowClass;[/SIZE]
     
    [SIZE=2]ZeroMemory(&WindowClass,[/SIZE][SIZE=2][COLOR=#0000ff]sizeof[/COLOR][/SIZE][SIZE=2](WNDCLASSEX));[/SIZE]
    [SIZE=2]Register(WindowClass);[/SIZE]
     
     
    [SIZE=2]awindow=CreateWindow( "ClassName",[/SIZE]
    [SIZE=2]                           "Window A",[/SIZE]
    [SIZE=2]                          WS_OVERLAPPED|WS_SYSMENU|WS_VISIBLE,[/SIZE]
    [SIZE=2]                         200,300,[/SIZE]
    [SIZE=2]                         200,300,[/SIZE]
    [SIZE=2]                          NULL,[/SIZE]
    [SIZE=2]                          NULL,[/SIZE]
    [SIZE=2]                        GetModuleHandle(NULL),[/SIZE]
    [SIZE=2]                          NULL);[/SIZE]
     
     
     
     
     
    [SIZE=2]bwindow=CreateWindow( "ClassName",[/SIZE][INDENT][INDENT][INDENT][INDENT][SIZE=2]"Window B",[/SIZE][/INDENT][INDENT][SIZE=2]WS_OVERLAPPED|WS_SYSMENU|WS_VISIBLE,[/SIZE][/INDENT][INDENT][SIZE=2]500,300,[/SIZE][/INDENT][INDENT][SIZE=2]200,300,[/SIZE][/INDENT][INDENT][SIZE=2]NULL,[/SIZE][/INDENT][INDENT][SIZE=2]NULL,[/SIZE][/INDENT][INDENT][SIZE=2]GetModuleHandle(NULL),[/SIZE][/INDENT][INDENT][SIZE=2]NULL);[/SIZE][/INDENT]
    [/INDENT][/INDENT][/INDENT][SIZE=2]ZeroMemory(&Message,[/SIZE][SIZE=2][COLOR=#0000ff]sizeof[/COLOR][/SIZE][SIZE=2](MSG));[/SIZE]
    [SIZE=2][COLOR=#0000ff]while[/COLOR][/SIZE][SIZE=2](Message.message!=WM_QUIT) [/SIZE]
     
     
     
    [SIZE=2]{[/SIZE][INDENT][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2](PeekMessage(&Message,NULL,0U,0U,PM_REMOVE))[/SIZE][INDENT][SIZE=2]{[/SIZE][/INDENT][INDENT][SIZE=2]TranslateMessage(&Message); [/SIZE][/INDENT][INDENT][SIZE=2]DispatchMessage(&Message); [/SIZE][/INDENT][INDENT][SIZE=2]}[/SIZE][/INDENT][SIZE=2]}[/SIZE]
     
     
     
    [/INDENT][SIZE=2][COLOR=#0000ff]return[/COLOR][/SIZE][SIZE=2] 0;[/SIZE]
    [SIZE=2]}[/SIZE]
    [SIZE=2]LRESULT CALLBACK WindowProcedure(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)[/SIZE]
    [SIZE=2]{[/SIZE]
    [SIZE=2][COLOR=#0000ff]switch[/COLOR][/SIZE][SIZE=2](msg)[/SIZE]
     
     
    [SIZE=2]{[/SIZE][INDENT][SIZE=2][COLOR=#0000ff]case[/COLOR][/SIZE][SIZE=2] WM_KEYDOWN:[/SIZE][/INDENT][INDENT][SIZE=2]{[/SIZE][/INDENT][INDENT][INDENT][SIZE=2][COLOR=#0000ff]switch[/COLOR][/SIZE][SIZE=2](wparam)[/SIZE][/INDENT][INDENT][SIZE=2]{[/SIZE][/INDENT][INDENT][SIZE=2][COLOR=#0000ff]case[/COLOR][/SIZE][SIZE=2] VK_ESCAPE: [/SIZE][/INDENT][INDENT][SIZE=2]{[/SIZE][/INDENT][INDENT][INDENT][SIZE=2]DestroyWindow(bwindow);[/SIZE][/INDENT][INDENT][SIZE=2][COLOR=#0000ff]break[/COLOR][/SIZE][SIZE=2];[/SIZE][/INDENT][/INDENT][INDENT][SIZE=2]}[/SIZE][/INDENT][INDENT][SIZE=2]}[/SIZE][/INDENT][INDENT][SIZE=2][COLOR=#0000ff]return[/COLOR][/SIZE][SIZE=2] 0;[/SIZE][/INDENT][/INDENT][INDENT][SIZE=2]}[/SIZE][/INDENT][INDENT][SIZE=2][COLOR=#0000ff]case[/COLOR][/SIZE][SIZE=2] WM_DESTROY:[/SIZE][/INDENT][INDENT][SIZE=2]{[/SIZE][/INDENT][INDENT][INDENT][SIZE=2]PostQuitMessage(0);[/SIZE][/INDENT][INDENT][SIZE=2][COLOR=#0000ff]break[/COLOR][/SIZE][SIZE=2];[/SIZE][/INDENT][/INDENT][INDENT][SIZE=2]}[/SIZE][/INDENT][SIZE=2]}[/SIZE]
    [SIZE=2][COLOR=#0000ff]return[/COLOR][/SIZE][SIZE=2] DefWindowProc(hwnd,msg,wparam,lparam);[/SIZE]
    [SIZE=2]}[/SIZE]


    Tut mir leid, falls ich mich hier irgendwo völlig in die Nesseln gesetzt habe aber ich hoffe es kann mir jemand weiterhelfen.

    Gruß

    Haribald
     

  2. #2
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    Du könntest das einzig richtige tun: Den beiden Fenster zwei verschiedene Window-Procs spendieren!

    Wenn es aber so laufen soll, kannst du bei VK_ESCAPE natürlich prüfen, ob das HWND das gewünschte ist. Wenn nicht, dann einfach nichts tun.

    Übrigens, die saubere Methode, die Grösse des Desktops zu bekommen sieht so aus:

    RECT rcDesktop;

    SystemParametersInfo( SPI_GETWORKAREA, 0, (PVPARAM)&rcDesktop, 0 );
     

  3. #3
    haribald haribald ist offline Rookie
    Registriert seit
    Jan 2005
    Beiträge
    7
    Hallo

    Vielen Dank, klappt wunderbar.

    Eine kleine Anschlussfrage noch, was meinst du mit (PVPARAM)?
     

  4. #4
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    Der Typ des 3. Parameters von SystemParametersInfo ist als PVPARAMS definiert. Da ich an der Stelle ein RECT* einsetze, muss ich das casten.
     

Ähnliche Themen

  1. Fenster schließen
    Von sunmania im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 23.05.08, 13:47
  2. fenster schließen
    Von Steffilove im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 8
    Letzter Beitrag: 30.03.07, 12:51
  3. Fenster schließen
    Von Tunemaster im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 7
    Letzter Beitrag: 21.06.05, 12:03
  4. Link in altem Fenster öffnen + Fenster schließen
    Von PhoenixDH im Forum Javascript & Ajax
    Antworten: 17
    Letzter Beitrag: 08.09.04, 22:10
  5. Fenster öffnen, Inhalt drucken, Fenster schließen
    Von dermac'z im Forum Javascript & Ajax
    Antworten: 8
    Letzter Beitrag: 02.07.04, 15:44