Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinAPI] Program wykorzystujący MDI

Ostatnio zmodyfikowano 2012-11-07 18:01
Autor Wiadomość
Tyski
Temat założony przez niniejszego użytkownika
[WinAPI] Program wykorzystujący MDI
» 2012-11-07 17:27:39
Mniej więcej to ma wyglądać  tak :) http://imageshack.us/f/705/ccclm.png/

C/C++
#include <windows.h>
#define ID_MDI_FIRSTCHILD  50000
#define ID_New 30222     //
#define ID_PRZYCISK1 501
#define ID_PRZYCISK2 502

LRESULT CALLBACK WindowProcedure( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );
LRESULT CALLBACK ChildWindowProcedure( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );

char szClassName[] = "KlasaOkna";
char szChildName[] = "KlasaOknaDziecka";

HWND hMDIClient;
HWND hNew, hOpen, hSave, hMDIEdit;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) {
   
    HWND hwnd;
    MSG messages;
    WNDCLASSEX wincl;
   
    // Klasa okna głównego
   
    wincl.hInstance = hInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;
    wincl.style = 0;
    wincl.cbSize = sizeof( WNDCLASSEX );
    wincl.hIcon = LoadIcon( hInstance, IDI_APPLICATION );
    wincl.hIconSm = LoadIcon( hInstance, IDI_APPLICATION );
    wincl.hCursor = LoadCursor( NULL, IDC_ARROW );
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;
    wincl.hbrBackground =( HBRUSH ) COLOR_WINDOW;
   
    if( !RegisterClassEx( & wincl ) )
         return FALSE;
   
    // Klasa okna dziecka
   
    wincl.lpfnWndProc = ChildWindowProcedure;
    wincl.lpszMenuName =( LPCTSTR ) NULL;
    wincl.lpszClassName = "KlasaOknaDziecka";
   
    if( !RegisterClassEx( & wincl ) )
         return FALSE;
   
    hwnd = CreateWindowEx(
    0,
    szClassName,
    "Aplikacja MDI",
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    400,
    300,
    NULL,
    NULL,
    hInstance,
    NULL
    );
    HWND hButton1 = CreateWindowEx( WS_EX_CLIENTEDGE, "BUTTON", "Pierwszy", WS_CHILD | WS_VISIBLE |
    WS_BORDER, 500, 50, 150, 30, hwnd,( HMENU ) ID_PRZYCISK1, hInstance, NULL ),
    hButton2 = CreateWindowEx( WS_EX_CLIENTEDGE, "BUTTON", "Drugi", WS_CHILD | WS_VISIBLE |
    WS_BORDER, 450, 100, 150, 30, hwnd,( HMENU ) ID_PRZYCISK2, hInstance, NULL );
    ShowWindow( hwnd, nCmdShow );
   
    CLIENTCREATESTRUCT ccs;
   
    ccs.hWindowMenu = NULL;
    ccs.idFirstChild = ID_MDI_FIRSTCHILD;
   
    hMDIClient = CreateWindowEx( 0, "MDICLIENT",( LPCTSTR ) NULL,
    WS_CHILD | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL,
    5, 5, 400, 300, hwnd,( HMENU ) 0xCAC, hInstance,( LPSTR ) & ccs );
   
    ShowWindow( hMDIClient, SW_SHOW );
   
    while( GetMessage( & messages, NULL, 0, 0 ) ) {
        if( !TranslateMDISysAccel( hMDIClient, & messages ) ) {
            TranslateMessage( & messages );
            DispatchMessage( & messages );
        }
    }
   
    return messages.wParam;
   
}

LRESULT CALLBACK WindowProcedure( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) {
    switch( message ) {
    case WM_COMMAND:
        switch( wParam )
        {
        case ID_PRZYCISK1:
            break;
           
        case ID_PRZYCISK2:
            MessageBox( hwnd, "Zamkniecie okna", "info", MB_ICONINFORMATION );
            DestroyWindow( hwnd );
            break;
           
            default:
            MessageBox( hwnd, "Zrobiłeś coś innego ;-)", "Test", MB_ICONINFORMATION );
        }
        break;
       
       
    case WM_DESTROY:
        PostQuitMessage( 0 );
        break;
    case WM_SIZE:
       
        break;
    default:
        return DefFrameProc( hwnd, hMDIClient, message, wParam, lParam );
    }
    return 0;
}

LRESULT CALLBACK ChildWindowProcedure( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) {
    switch( message ) {
       
        // tu możesz dać różne case'y
       
       
        default:
        return DefMDIChildProc( hwnd, message, wParam, lParam );
       
    }
    return 0;
}


Proszę o prawienie w miarę możliwości.
P-68724
wojownik266
» 2012-11-07 17:31:58
Co ci będę "prawił", sam najlepiej wiesz jak jest.
P-68726
Tyski
Temat założony przez niniejszego użytkownika
sorry
» 2012-11-07 17:34:02
Sorrki za błąd "poprawić" . Prosiłbym bardzo o jakąś pomoc jak to wykonać :))
P-68727
DejaVu
» 2012-11-07 17:41:23
P-68729
Tyski
Temat założony przez niniejszego użytkownika
» 2012-11-07 17:43:08
Kurcze właśnie robię z tego i nie wychodzi mi to z nowymi oknami. Nie wiem jak dodać do buttona to i gdzie dać to.
P-68730
DejaVu
» 2012-11-07 17:46:44
Z kodu, który zamieściłeś wynika, że w praktyce nic sensownego nie napisałeś, a więc albo czytasz kurs WinAPI wyrywkowo albo nie przeczytałeś dokładnie rozdziału do którego linka dostałeś.
P-68731
Tyski
Temat założony przez niniejszego użytkownika
» 2012-11-07 17:50:56
To fajnego mam nauczyciela od infy xD I powiedźcie jak tu się opłaca chodzić do szkoły jak on takie coś uczy.. ;/ spróbuje jeszcze raz ale wątpię bo powtarzać będę to przez niego ten błąd xD
P-68733
DejaVu
» 2012-11-07 17:59:21
Jeżeli swój brak umiejętności czytania tekstu ze zrozumieniem zwalasz na osoby trzecie to znaczy, że na programistę się nie nadajesz. Nauczyciel zapewne dobrze tłumaczył tylko Ty go nie słuchałeś uważnie.
P-68734
« 1 » 2
  Strona 1 z 2 Następna strona