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

[WinAPI] Prawidłowe użycie makra TabCtrl_InsertItem

Ostatnio zmodyfikowano 2012-12-26 13:31
Autor Wiadomość
dzwigar
Temat założony przez niniejszego użytkownika
[WinAPI] Prawidłowe użycie makra TabCtrl_InsertItem
» 2012-12-23 23:33:02
Witam serdecznie.
Panowie postanowilem przebudować moje okno dodając
zakładki z tej części kursu Zakładki (TabCtrl)

Ale teraz poleglem z prawidłowym użyciem makra.

int TabCtrl_InsertItem( HWND hwnd, int iItem, const LPTCITEM pitem );

C/C++
//zakladki
HWND hTab = CreateWindowEx( 0, WC_TABCONTROL, 0, WS_CHILD | WS_VISIBLE | TCS_FIXEDWIDTH, 0, 0, 544, 375, hWnd, 0, hInstance, NULL );
typedef struct {
    UINT mask;
    #if (_WIN32_IE >= 0x0300)
    DWORD dwState;
    DWORD dwStateMask;
    #else
    UINT lpReserved1;
    UINT lpReserved2;
    #endif
    LPTSTR pszText;
    int cchTextMax;
    int iImage;
    LPARAM lParam;
} TCITEM, * LPTCITEM;
int TabCtrl_InsertItem( HWND hwnd, int iItem, const LPTCITEM pitem );

hTab = CreateWindowEx( 0, WC_TABCONTROL, 0, WS_CHILD | WS_VISIBLE | TCS_FIXEDWIDTH, 0, 0, 544, 375, hWnd,( HMENU ) 10, hInstance, NULL );
TabCtrl_SetItemSize( hTab, 150, 20 );
TCITEM tci1, tci2;
tci1.mask = TCIF_TEXT;
tci2.mask = TCIF_TEXT;
tci1.pszText = "Zaawansowane";
tci2.pszText = "Standardowe";
tci1.cchTextMax = sizeof( "Zaawansowane" );
tci2.cchTextMax = sizeof( "Standardowe" );
TabCtrl_InsertItem( hTab, ID_TAB_ZW, & tci1 );
TabCtrl_InsertItem( hTab, ID_TAB_ST, & tci2 );
P-71821
xevuel
» 2012-12-24 08:08:18
C/C++
//...
} TCITEM, * LPTCITEM;
int TabCtrl_InsertItem( HWND hwnd, int iItem, const LPTCITEM pitem );
Co to? Zastanawiałeś się, co wklejasz?
P-71828
dzwigar
Temat założony przez niniejszego użytkownika
» 2012-12-24 12:04:44
W trakcie wklejania zapewne nie .

Doszedłem już do tego że te makr  jest dodany dwa razy , troche czasu mineło.
Teraz muszę uporać się z prawidłowym wyświetlaniem zakładek w moim oknie głównym
bo zakładki robiłem w oknie na którym miałem juz kontrolki i wszystko się
zagmatwało.

Dodałem już obsługe zakładek do prezłącznika ale przy deklarowaniu LPNMHDR n;

mam błąd i brak jego opisu prez kompilator. Prosze Was o pomoc.Zamieszczam caly kod:
C/C++
#include <windows.h>
//#include <cstdlib>
//#include <math.h>
#include <string>
//#include <stdlib.h>
#include <cstdio>
#include <commctrl.h>

#define ID_TAB_ZW 1
#define ID_TAB_ST 0
#define ID_przycisk 501


LPSTR klasa = "Klasa1"; //zmienna globalna

MSG Komunikat; //komunikaty zapisywane w zmienne globalnej

// Identyfikator

//przyciski
HWND hPrzycisk;
//pola tekstowe
HWND hText;
HWND hText1;
HWND hText2;
HWND hText3;
HWND hText4;
HWND hText5;
HWND hText6;
HWND hText7;

//zakladki
HWND hTab;
//static
HWND hStatic;
HWND hStatic1;
HWND hStatic2;
HWND hStatic3;
HWND hStatic4;

LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );

void wynik();
//int TabCtrl_InsertItem( HWND hwnd, int iItem, const LPTCITEM pitem );
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
   
    WNDCLASS wc; //klasa okna
    //wypelnienie klasy okna
    wc.style = 0; // styl struktory
    wc.lpfnWndProc = WndProc; // wskaznik do procedury obslugi okna
    wc.cbClsExtra = 0; // dodatkowe bity
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); // ikonka programu
    wc.hCursor = LoadCursor( NULL, IDC_ARROW ); // kursor
    wc.hbrBackground = GetSysColorBrush( COLOR_3DFACE ); //(HBRUSH)(COLOR_WINDOW + 1); // tlo okna
    wc.lpszMenuName = NULL;
    wc.lpszClassName = klasa;
   
    RegisterClass( & wc ); // rejestracja okna
    // tworzenie okna
    HWND hWnd = CreateWindowEx( WS_EX_CLIENTEDGE, klasa, "okienko", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 1500, 500, NULL, NULL, hInstance, NULL );
    //zakladki
   
    typedef struct {
        UINT mask;
        #if (_WIN32_IE >= 0x0300)
        DWORD dwState;
        DWORD dwStateMask;
        #else
        UINT lpReserved1;
        UINT lpReserved2;
        #endif
        LPTSTR pszText;
        int cchTextMax;
        int iImage;
        LPARAM lParam;
    } TCITEM, * LPTCITEM;
   
   
    hTab = CreateWindowEx( 0, WC_TABCONTROL, 0, WS_CHILD | WS_VISIBLE | TCS_FIXEDWIDTH, 0, 0, 1500, 500, hWnd,( HMENU ) 10, hInstance, NULL );
    TabCtrl_SetItemSize( hTab, 150, 20 );
    TCITEM tci1, tci2;
    tci1.mask = TCIF_TEXT;
    tci2.mask = TCIF_TEXT;
    tci1.pszText = "Zaawansowane";
    tci2.pszText = "Standardowe";
    tci1.cchTextMax = sizeof( "Zaawansowane" );
    tci2.cchTextMax = sizeof( "Standardowe" );
    TabCtrl_InsertItem( hTab, ID_TAB_ZW, & tci1 );
    TabCtrl_InsertItem( hTab, ID_TAB_ST, & tci2 );
    //przycisk
    hPrzycisk = CreateWindowEx( WS_EX_CLIENTEDGE, "BUTTON", "Beregn", WS_CHILD | WS_VISIBLE, 170, 280, 100, 30, hTab,( HMENU ) ID_przycisk, hInstance, NULL );
    //pole tekstowe
    hText = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 230, 35, 40, 20, hTab, NULL, hInstance, NULL );
    hText1 = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 65, 65, 30, 20, hTab, NULL, hInstance, NULL );
    hText2 = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 65, 95, 30, 20, hTab, NULL, hInstance, NULL );
    hText3 = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 65, 125, 30, 20, hTab, NULL, hInstance, NULL );
   
    hText4 = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 400, 35, 30, 20, hWnd, NULL, hInstance, NULL );
   
   
    //tekst statyczny
    HWND hStatic = CreateWindowEx( 0, "STATIC", NULL, WS_CHILD | WS_VISIBLE | SS_LEFT, 170, 38, 55, 15, hTab, NULL, hInstance, NULL );
    //ustawienie tekst
    SetWindowText( hStatic, "Klassa" );
    HWND hStatic1 = CreateWindowEx( 0, "STATIC", NULL, WS_CHILD | WS_VISIBLE | SS_LEFT, 5, 68, 55, 15, hTab, NULL, hInstance, NULL );
    //ustawienie tekst
    SetWindowText( hStatic1, "Lengde" );
    HWND hStatic2 = CreateWindowEx( 0, "STATIC", NULL, WS_CHILD | WS_VISIBLE | SS_LEFT, 5, 98, 55, 15, hTab, NULL, hInstance, NULL );
    //ustawienie tekst
    SetWindowText( hStatic2, "Brede" );
    HWND hStatic3 = CreateWindowEx( 0, "STATIC", NULL, WS_CHILD | WS_VISIBLE | SS_LEFT, 5, 128, 55, 15, hTab, NULL, hInstance, NULL );
    //ustawienie tekst
    SetWindowText( hStatic3, "Hoyde" );
    HWND hStatic4 = CreateWindowEx( 0, "STATIC", NULL, WS_CHILD | WS_VISIBLE | SS_LEFT, 320, 38, 75, 15, hTab, NULL, hInstance, NULL );
    //ustawienie tekst
    SetWindowText( hStatic4, "Antall Fag" );
   
    //Wyswietlanie okna
   
    ShowWindow( hWnd, nCmdShow );
    UpdateWindow( hWnd );
    /*Petla komunikatow */
    while( GetMessage( & Komunikat, NULL, 0, 0 ) )
    {
        TranslateMessage( & Komunikat );
        DispatchMessage( & Komunikat );
    }
    return Komunikat.wParam;
   
}

//procedura okna
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg ) //obsluga komunikatow okna
    {
    case WM_NOTIFY:
                LPNMHDR n;
                n =( LPNMHDR ) lParam;
                if( n->code == TCN_SELCHANGE && n->hwndFrom == hTab ) // Sprawdza, czy uchwyt pochodzi od hTab
                {
                        int index = TabCtrl_GetCurSel( hTab );
           
                        switch( index ) // indeks aktualnej kontrolki
                        {
                        case ID_TAB_ST:
                                ShowWindow( hStatic, SW_SHOW );
                ShowWindow( hStatic1, SW_SHOW );
                ShowWindow( hStatic2, SW_SHOW );
                ShowWindow( hStatic3, SW_SHOW );
                ShowWindow( hStatic4, SW_SHOW );
                ShowWindow( hText, SW_SHOW );
                ShowWindow( hText1, SW_SHOW );
                ShowWindow( hText2, SW_SHOW );
                ShowWindow( hText3, SW_SHOW );
                ShowWindow( hText, SW_SHOW );
                ShowWindow( hPrzycisk, SW_SHOW );
               
                              //  ShowWindow( an, SW_HIDE );
                                break;
                        case ID_TAB_ZW:
                                ShowWindow( hStatic, SW_HIDE );
                ShowWindow( hStatic1, SW_HIDE );
                ShowWindow( hStatic2, SW_HIDE );
                ShowWindow( hStatic3, SW_HIDE );
                ShowWindow( hStatic4, SW_HIDE );
                ShowWindow( hText, SW_HIDE );
                ShowWindow( hText1, SW_HIDE );
                ShowWindow( hText2, SW_HIDE );
                ShowWindow( hText3, SW_HIDE );
                ShowWindow( hText, SW_HIDE );
                ShowWindow( hPrzycisk, SW_HIDE );
                                break;
                                //itd.
                            }
                    }
    case WM_CLOSE:
        DestroyWindow( hwnd );
        break;
    case WM_DESTROY:
        PostQuitMessage( 0 );
        break;
    case WM_COMMAND:
       
        switch( wParam )
        {
        case ID_przycisk:
            wynik();
            break;
        }
        default:
        return DefWindowProc( hwnd, msg, wParam, lParam );
    }
    return 0;
}

void wynik()
{
   
    DWORD length1 = GetWindowTextLength( hText1 );
    LPSTR buf1 =( LPSTR ) GlobalAlloc( GPTR, length1 );
    GetWindowText( hText1, buf1, length1 + 3 );
    for( size_t i = 0, j = strlen( buf1 ); i < j; ++i )
    {
        if( buf1[ i ] == ',' ) buf1[ i ] = '.';
       
    }
   
    DWORD length2 = GetWindowTextLength( hText2 );
    LPSTR buf2 =( LPSTR ) GlobalAlloc( GPTR, length2 );
    GetWindowText( hText2, buf2, length2 + 3 );
    for( size_t i = 0, j = strlen( buf2 ); i < j; ++i )
    {
        if( buf2[ i ] == ',' ) buf2[ i ] = '.';
       
    }
   
    DWORD length3 = GetWindowTextLength( hText3 );
    LPSTR buf3 =( LPSTR ) GlobalAlloc( GPTR, length3 );
    GetWindowText( hText3, buf3, length3 + 3 );
   
    for( size_t i = 0, j = strlen( buf3 ); i < j; ++i )
    {
        if( buf3[ i ] == ',' ) buf3[ i ] = '.';
       
    }
    double a, b, c, wyn;
    sscanf( buf1, "%lf", & a );
    sscanf( buf2, "%lf", & b );
    sscanf( buf3, "%lf", & c );
    wyn =( a + b + c );
    char result[ 100 ];
   
    sprintf( result, "%lf", wyn );
   
    SetWindowText( hText, result );
   
}
P-71832
xevuel
» 2012-12-24 13:40:45
Cóż to za błąd?
P-71841
dzwigar
Temat założony przez niniejszego użytkownika
» 2012-12-24 13:46:36
Oto i błąd kompilatora

E:\programowanie\codeblocks\kalkulator\main.cpp|144|error: stray '\240' in program|

Kompilowałem w Code::Blocks i DevCpp.
P-71843
xevuel
» 2012-12-24 13:56:14
Albo w 144 linijce masz jakiś znak, którego nie wkleiłeś na forum, albo coś pomieszałeś z plikami nagłówkowymi. Podany kod kompiluje się bezbłędnie.
P-71846
dzwigar
Temat założony przez niniejszego użytkownika
» 2012-12-24 14:05:20
Cholera zawsze coś, w podanym kodzie w linijce 144 mie mam znaku po za LPNMHDR n;

Kompilator sypie błędami aż do break linijka 166. Dziwne bo skopiowalem podany kod do
nowo zainstalowanego Devcpp i to samo mam . Jedno co mnie cieszy że u Ciebie się kompiluje
ale tylko u Ciebie xevuel :(.
P-71849
xevuel
» 2012-12-24 14:08:23
Musiałeś coś namieszać. Sugeruję reinstalację C::B i Deva, oraz zainstalowanie najnowszego MinGW. Aha, i jeśli to nie jest Twój jedyny błąd, który dostajesz, to wklej wszystko - a nuż coś się zauważy :)
P-71850
« 1 » 2 3
  Strona 1 z 3 Następna strona