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

Winapi okno potomne i okno rodzica może tu ....

Ostatnio zmodyfikowano 2013-01-23 13:51
Autor Wiadomość
piotrusbor
Temat założony przez niniejszego użytkownika
» 2013-01-22 15:44:39
A czy zastosowanie czegos takiego da rezultat ?
return RegisterClassEx( & wcex && & wcex1 );
 ?

Ehhh nie da już wiem ;/
P-74684
piotrusbor
Temat założony przez niniejszego użytkownika
» 2013-01-23 12:04:51
Stara klasa została, a pod nią napisałem (przepisałem) nową klasę:
C/C++
ATOM MyRegisterClass( WNDPROC WndProcChild, char * szWindowClassChild )
{
    WNDCLASSEX wcex;
   
    wcex.cbSize = sizeof( WNDCLASSEX );
   
    wcex.style = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc = WndProcChild;
    wcex.cbClsExtra = 0;
    wcex.cbWndExtra = 0;
    wcex.hInstance = hInst;
    wcex.hIcon = LoadIcon( hInst, MAKEINTRESOURCE( IDI_JJJ ) );
    wcex.hCursor = LoadCursor( NULL, IDC_ARROW );
    wcex.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 );
    wcex.lpszMenuName = NULL;
    wcex.lpszClassName = szWindowClassChild;
    wcex.hIconSm = LoadIcon( wcex.hInstance, MAKEINTRESOURCE( IDI_SMALL ) );
   
    return RegisterClassEx( & wcex );
}
Po
MyRegisterClass( hInstance );

dałem

MyRegisterClass( WndProcChild, szWindowClassChild );
 
i nic ;/
Okno się rysuje ale po naciśnięciu buttona mam
Run-Time Check Failure #3 - The variable 'noweOkno' is being used without being initialized.
P-74794
xevuel
» 2013-01-23 12:18:17
Po pierwsze, przetłumacz sobie to co dostałeś po kliknięciu przycisku. Po drugie, dlaczego brniesz w coś, o czym nie masz pojęcia, podczas gdy jest kilka innych dobrze opisanych dróg?
P-74799
piotrusbor
Temat założony przez niniejszego użytkownika
» 2013-01-23 12:41:13
No wiem że zmienna została użyta bez jej zainicjowania ale co dalej to już nie ;/;/
Problem jest w tym, że nie znam - inaczej nie znalazłem innej drogi lub nie zostałem odpowiednio nakierunkowany, a sęk w tym, że muszę dokończyć to co już mam napisane w moim innym prog. głównym. Tutaj podaję tylko to nad czym się zatrzymałem, stworzyłem sobie jakiś zwykły dokument w którym próbuję uzyskać efekt taki jaki jest mi właśnie potrzebny, czyli rysowanie nowego okna. No i niestety....
P-74800
DejaVu
» 2013-01-23 12:46:01
http://msdn.microsoft.com/en-us/library/aa260966(v=vs.60).aspx
0xCCCCCCCC - Uninitialized locals (on the stack)
P-74801
xevuel
» 2013-01-23 12:46:20
Problem jest w tym, że nie znam - inaczej nie znalazłem innej drogi lub nie zostałem odpowiednio nakierunkowany
Sam wskazałem Ci dwie najprostsze, a na innych forach pewnie podali ich jeszcze więcej...
P-74802
piotrusbor
Temat założony przez niniejszego użytkownika
» 2013-01-23 13:28:20
Dobra:
Poczytaj o jednym i o drugim i sam dobierz, co wydaje Ci się bardziej odpowiednie. Ja wybrałbym raczej MDI.Ok więc biorę MDI. Czytam z kursu.
Robię krok po kroku to co jest napisane.
Otrzymuję co poniżej:
C/C++
// projproj.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "projproj.h"
#define MAX_LOADSTRING 100
#define ID_MDI_FIRSTCHILD  50000

// Global Variables:
HINSTANCE hInst; // current instance
HWND hMDIClient;
TCHAR szTitle[ MAX_LOADSTRING ]; // The title bar text
TCHAR szWindowClass[ MAX_LOADSTRING ]; // the main window class name
TCHAR szWindowClassChild[ MAX_LOADSTRING ];

// Forward declarations of functions included in this code module:
ATOM MyRegisterClass( HINSTANCE hInstance );
BOOL InitInstance( HINSTANCE, int );
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );
LRESULT CALLBACK WndProcChild( HWND, UINT, WPARAM, LPARAM );
INT_PTR CALLBACK About( HWND, UINT, WPARAM, LPARAM );

int APIENTRY _tWinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow )
{
    UNREFERENCED_PARAMETER( hPrevInstance );
    UNREFERENCED_PARAMETER( lpCmdLine );
   
    // TODO: Place code here.
    MSG msg;
    HACCEL hAccelTable;
   
    // Initialize global strings
    LoadString( hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING );
    LoadString( hInstance, IDC_PROJPROJ, szWindowClass, MAX_LOADSTRING );
    MyRegisterClass( hInstance );
   
    // Perform application initialization:
    if( !InitInstance( hInstance, nCmdShow ) )
    {
        return FALSE;
    }
   
    hAccelTable = LoadAccelerators( hInstance, MAKEINTRESOURCE( IDC_PROJPROJ ) );
   
    // Main message loop:
   
    while( GetMessage( & msg, NULL, 0, 0 ) ) {
        if( !TranslateMDISysAccel( hMDIClient, & msg ) )
        {
            TranslateMessage( & msg );
            DispatchMessage( & msg );
        }
    }
    return( int ) msg.wParam;
}




ATOM MyRegisterClass( HINSTANCE hInstance )
{
    WNDCLASSEX wcex;
    wcex.cbSize = sizeof( WNDCLASSEX );
    wcex.style = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc = WndProc;
    wcex.cbClsExtra = 0;
    wcex.cbWndExtra = 0;
    wcex.hInstance = hInstance;
    wcex.hIcon = LoadIcon( hInstance, MAKEINTRESOURCE( IDI_PROJPROJ ) );
    wcex.hCursor = LoadCursor( NULL, IDC_ARROW );
    wcex.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 );
    wcex.lpszMenuName = MAKEINTRESOURCE( IDC_PROJPROJ );
    wcex.lpszClassName = szWindowClass;
    wcex.hIconSm = LoadIcon( wcex.hInstance, MAKEINTRESOURCE( IDI_SMALL ) );
   
    wcex.lpfnWndProc = WndProcChild;
    wcex.lpszMenuName =( LPCTSTR ) NULL;
    wcex.lpszClassName = szWindowClassChild;
   
    return RegisterClassEx( & wcex );
}


BOOL InitInstance( HINSTANCE hInstance, int nCmdShow )
{
    HWND hWnd;
   
    hInst = hInstance; // Store instance handle in our global variable
   
    hWnd = CreateWindow( szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL );
   
   
    if( !hWnd )
    {
        return FALSE;
    }
   
    ShowWindow( hWnd, nCmdShow );
    UpdateWindow( hWnd );
   
    CLIENTCREATESTRUCT ccs;
    ccs.hWindowMenu = NULL;
    ccs.idFirstChild = ID_MDI_FIRSTCHILD;
   
    hMDIClient = CreateWindowEx( 0, szWindowClassChild,( LPCTSTR ) NULL,
    WS_CHILD | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL,
    5, 5, 640, 480, hWnd,( HMENU ) 0xCAC, hInstance,( LPSTR ) & ccs );
    ShowWindow( hMDIClient, SW_SHOW );
   
    return TRUE;
}


LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
   
    switch( message )
    {
    case WM_COMMAND:
        wmId = LOWORD( wParam );
        wmEvent = HIWORD( wParam );
        // Parse the menu selections:
        switch( wmId )
        {
        case IDM_ABOUT:
            DialogBox( hInst, MAKEINTRESOURCE( IDD_ABOUTBOX ), hWnd, About );
            break;
        case IDM_EXIT:
            DestroyWindow( hWnd );
            break;
            default:
            return DefWindowProc( hWnd, message, wParam, lParam );
        }
        break;
    case WM_PAINT:
        hdc = BeginPaint( hWnd, & ps );
       
        // TODO: Add any drawing code here...
        EndPaint( hWnd, & ps );
        break;
    case WM_DESTROY:
        PostQuitMessage( 0 );
        break;
        default:
        return DefWindowProc( hWnd, message, wParam, lParam );
    }
    return 0;
}


INT_PTR CALLBACK About( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
{
    UNREFERENCED_PARAMETER( lParam );
    switch( message )
    {
    case WM_INITDIALOG:
        return( INT_PTR ) TRUE;
       
    case WM_COMMAND:
        if( LOWORD( wParam ) == IDOK || LOWORD( wParam ) == IDCANCEL )
        {
            EndDialog( hDlg, LOWORD( wParam ) );
            return( INT_PTR ) TRUE;
        }
        break;
    }
    return( INT_PTR ) FALSE;
}

LRESULT CALLBACK WndProcChild( 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;
}

I coś mignie, śmignie i koniec. Różnica pomiędzy tym co ja pisałem a tym co zostało zawarte w kursie to metoda tworzenia okna głównego w głównej funkcji, a w tym całym VS 2010Exp. jest jakoś inaczej ....
Dlaczego okno główne w VS2010Exp. tworzone jest w
BOOL InitInstance( HINSTANCE hInstance, int nCmdShow )
a nie w głównej funkcji ? Czy autor miał na celu ułatwienie czy cos innego ?
No sam juz nie wiem gdzie robie te swoje głupie błędy ;/;/

 
P-74806
xevuel
» 2013-01-23 13:51:31
VS ma inny szablon projektu Windowsowego niż C::B czy Dev. Tak naprawdę nie ma to prawie żadnej różnicy w działaniu programu.

Przeczytaj sobie od początku » KursyKurs WinAPI, C++ kurs, zrozumiesz co robią poszczególne funkcje. A najlepszym rozwiązaniem będzie, jeśli skopiujesz ten kod podany w lekcji o MDI i zmodyfikujesz zgodnie ze swoimi potrzebami.
P-74808
1 « 2 »
Poprzednia strona Strona 2 z 2