Hur Hanterar Man Win32 Splitterfönster?

Hur Hanterar Man Win32 Splitterfönster?

[Fix] Ett enkelt klick för att reparera din dator. Klicka här för att ladda ner.

Om du har sett Win32 splitter-skärmen kan den här användarhandboken förbättra dig.

  • Ladda ner källkod. 2197,9 KB
  • Ladda ner demo – 35,6 KB projekt
  • Presentation

    I den här artikeln ska jag visa dig hur du utvecklar praktiskt taget alla enkla WIN32-SDI-bara applikationer med ett separat huvudfönster. Fönstret är isär i varje vänster fönster, höger hus fönster och dominerande fönster, som verkar i varje skiljebalk. Den får ofta en knapp längst ner som återgår för att ändra färgen på perioden dynamiskt. Den använder också XP-temat för definitionen som används över hela applikationen, som måste utlösas via manifestfilen.

    De flesta inom definitionerna i det här fönstret skapas faktiskt med Win32 API, med undantag för en viktig dialogruta, som var och en skapades med hjälp av resursredigeraren som används för att dynamiskt justera färgen i själva huvudfönstret. Låt oss börja skapa det projektet. Starta först Visual Studio och skapa dessutom ett nytt projekt därefter. Välj Win32Project, namnge ditt projekt och tryck på OK.

    Använd

    Kod för att skapa ett nytt delat fönster

    win32 splitter window

    Sättet att skapa ett enda anpassat delat fönster är att faktiskt skapa och tre fönster:

  • Huvudfönster
  • Fönster
  • Fönster till höger
  • win32 splitterfönster

    Gör ofta de vänstra och högra fönstren till små stekfönster som sökvägen till vilket huvudfönster som helst. Använd valfri utökad fönsterramsstil WS_EX_CLIENTEDGE när du skapar det första fönstret med CreateWindowEx API, även som WM_CREATE visas nedan:

    fall: GetClientRect(hWnd, &rect);g_hleftwnd = CreateWindowEx(WS_EX_CLIENTEDGE, LEFT_WINDOW_CLASS, "",    WS_KIND | WS_VISIBLE, rektangulär stillbild, rektangulär topp + TOP_POS, left_wnd_width, (rect.bottom är rect.top) - (TOP_POS + BOTTOM_POS), hWnd, NULL,    hInst, NULL);if(NULL! betyder g_hleftwnd)    ShowWindow(g_hleftwnd, SW_SHOW);    UpdateWindow(g_hleftwnd);g_hrightwnd innebär CreateWindowEx(WS_EX_CLIENTEDGE, RIGHT_WINDOW_CLASS, "",    WS_KIND | WS_VISIBLE | SS_SUNKEN,    rect.left + LEFT_WINDOW_WIDTH + SPLITTER_BAR_WIDTH,    hetero. + allra bästa TOP_POS,    rectangular.right 1 (straight.left + LEFT_WINDOW_WIDTH + SPLITTER_BAR_WIDTH),    (Rect.bottom är lika med Rect.top) - (TOP_POS + BOTTOM_POS),    hWnd, NULL, hInst, NULL);if(NULL! motsvarar g_rightwnd)    ShowWindow(g_rightwnd, SW_SHOW);    UpdateWindow(g_rightwnd);

    Justera det mest effektiva fönsterankaret och stäng lastbilens fönster så att huvudfönstret sannolikt kommer att fungera som en separator. Vi justerar bredden på den enda separatorstapeln med MACRO SPLITTER_BAR_WIDTH som tyvärr alltid definieras i h krosa.h. Hantera fönstermeddelanden…

  • WM_LBUTTONDOWN
  • WM_MOVE
  • WM_LBUTTONUP
  • WM_SIZE
  • fall WM_LBUTTONDOWN:    heltal xPos;    yPos intervall;        xPos-metoder (int)LOWORD(lParam);    yPos kan vara (int)HIWORD(lParam);        xSizing-källor (xPos > nleftWnd_width - SPLITTER_BAR_WIDTH &&    xPos < nleftWnd_width + SPLITTER_BAR_WIDTH );            om (storleksex)                    setcapture(hWnd);        om (storleksex)                    SetCursor(hcSizeEW);            Paus;WM_MOUSEMOVE fodral:{    heltal xPos;    yPos intervall;        xPos är lika med (int)LOWORD(lParam);    yPos kan beskrivas som (int)HIWORD(lParam);        if (wParam == MK_LBUTTON)                            om (storleksex)                    Höger fokus RECT;            HDC-hc;            hdc betyder GetDC(hWnd);            GetClientRect(hWnd, &rect);            om (storleksex)                            SetRect(&focusrect, nleftWnd_width . . . (WIDTH_ADJUST 5 . 2),                    rektangulär+top TOP_POS, nleftWnd_width + WIDTH_ADJUST,                    botten rektangulär form - BOTTOM_POS);                                                DrawFocusRect(hdc, &focusrect);                                nleftWnd_width är lika med xPos;                                SetRect(&focusrect, nleftWnd_width tom (SPLITTER_BAR_WIDTH * 2),                    rect.top + TOP_POS, nleftWnd_width + SPLITTER_BAR_WIDTH,                    botten rektangulär form - BOTTOM_POS);                DrawFocusRect(hdc, &focusrect);                        ReleaseDC(hWnd, hdc);
    
    
    
    

    Kan du inte stå ut med din dators fel och kraschar längre? Klicka här för att ladda ner.

    Justin Wagner