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

WinAPI - Sprawdzanie wciśniętego buttona..

Ostatnio zmodyfikowano 2016-04-27 22:40
Autor Wiadomość
SennyK
Temat założony przez niniejszego użytkownika
WinAPI - Sprawdzanie wciśniętego buttona..
» 2016-04-21 20:47:29
Witam.
Jestem tutaj nowy, więc witam programistów :P

A więc tak.. Ucze się od dziś WinAPI no i mam pare problemów... Zrobiłem okno windowsowe, pobawiłem się troche w nim a teraz mam pytanie...
Jak zrobić sprawdzenie naciśniętego buttona w MessageBoxie? W poradniku było tylko opisane jak sprawdzić naciśnięty button ale w oknie głównym..
Oto mój kod:
C/C++
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
    case WM_CLOSE:
        MessageBox( hwnd, "Czy na pewno chcesz wyjść?", "Wyjście", MB_ICONINFORMATION | MB_OKCANCEL );
        switch()
        {
        case ID_OK:
            DestroyWindow( hwnd );
            break;
           
        case ID_CANCEL:
            return DefWindowProc( hwnd, msg, wParam, lParam );
            break;
        }
        break;
       
    case WM_DESTROY:
        PostQuitMessage( 0 );
        break;
        default:
        return DefWindowProc( hwnd, msg, wParam, lParam );
    }
}

Moge pomógłby ktoś? Jestem amatorem w WinAPI...

P.S. Umiem bardzo dobrze C++ ale tego czystego konsolowego... przyda mi sie w WinAPI czy nie za bardzo? Chodzi mi o takie funkcje jak np: rand srand itd itp..

Pozdrawiam Sennyk
P-147508
Gibas11
» 2016-04-21 21:02:53
WinAPI ogranicza Cię do jednej platformy, jak uczysz się jeden dzień to lepiej odpuścić i zająć się Qt, są fajne narzędzia jak Qt creator itp.

Co do samego pytania, to chyba jest ok, ale kawałek
MessageBox( hwnd, "Czy na pewno chcesz wyjść?", "Wyjście", MB_ICONINFORMATION | MB_OKCANCEL );
powinieneś przenieść do switcha, o tak:
switch( MessageBox( hwnd, "Czy na pewno chcesz wyjść?", "Wyjście", MB_ICONINFORMATION | MB_OKCANCEL ) )

Bo nie chodzi Ci chyba o same przyciski, tylko efekt wyboru użytkownika, tak?
P-147511
SennyK
Temat założony przez niniejszego użytkownika
no tak, masz racje, ale..
» 2016-04-22 22:34:23
no tak, ale ja nie moge korzystać, z żadnych kreatorów, tylko musi to być czysty kod C++ na zaliczenie z podstaw programowania, abym dostał celujący na koniec roku..

Rozumiem, ze nalezy dac to do switch'a, ale jak zrobić case'y z id tych przycisków (ID_OK i ID_CANCEL) nie działają... Mam czas do czerwca, żeby to ogarnąć :)
P-147552
j23
» 2016-04-23 10:42:56
Nie ID_OK i ID_CANCEL, tylko IDOK i IDCANCEL. Czytaj dokumentację!
P-147555
Gibas11
» 2016-04-23 14:32:38
@up
Że też nie zauważyłem. :\

@autor
1. Qt nie narzuca używania kreatorów, to tylko możliwość. Tak czy inaczej kod jest czysty i bardziej OO.
2. Kreator wypluwa Ci zwykły plik (chyba xml), standardowy format do projektowania UI w Qt, nikt nie każe Ci mówić, że coś to zrobiło za Ciebie. ;)
P-147559
SennyK
Temat założony przez niniejszego użytkownika
» 2016-04-25 20:29:55
no tak, tylko jak mi facet z P.Programowania zapytaj co i jak? albo coś mi zmieni to co ja mu powiem?

Wiem Ze IDOK a nie ID_OK poprostu pomyliło mi się..

Chodzi mi o proste sprawdzenie naciśniętego klawisza, a jak to jest takie trudne to poprosze o coś łatwiejszego w którym napisze aplikacje na windowsa okienkowa w czystym (powtarzam czystym) C++ tak jak to sie robi na CMD i WinAPI, bez zadnych kreatorów...
P-147656
pekfos
» 2016-04-25 20:51:10
Wiem Ze IDOK a nie ID_OK poprostu pomyliło mi się..
No i co z tym teraz? Działa, nie działa?

albo coś mi zmieni to co ja mu powiem?
Możesz mu powiedzieć, że ci to nie robi różnicy, kod i tak miałeś skopiowany z kursu.
P-147661
carlosmay
» 2016-04-25 22:20:52
Może coś takiego się przyda?

C/C++
#define ID_BUTTON_1 501 // id twojego przycisku
// ...
WinMain()
{
    // produkcja przycisku
    g_hButton_1 = CreateWindowEx( WS_EX_CLIENTEDGE,( LPCWSTR ) _T( "BUTTON" ), _T( "Button 1" ),
    WS_CHILD | WS_VISIBLE | WS_BORDER,
    30, 40, 150, 30, hOkno,( HMENU ) ID_BUTTON_1, hInst, NULL );
    // rzutowanie na (HMENU) wartości ID_BUTTON_1 i tą wartość obsługuje wParam
}

//...
LRESULT CALLBACK WndProc( HWND hOkno, UINT message, WPARAM wParam, LPARAM lParam )
{
    switch( message )
    {
    case WM_COMMAND:
        {
            switch( wParam ) // tutaj z wParam odczytujemy wartość, którą wysyła przycisk
            {
            case ID_BUTTON_1:
                MessageBox( NULL, _T( "Użyto Przycisk 1" ), NULL, MB_ICONINFORMATION );
                break;
            }
        case WM_DESTROY:
            PostQuitMessage( 0 );
            break;
            default:
            return DefWindowProc( hOkno, message, wParam, lParam );
            break;
        }
        return 0;
    }
P-147669
« 1 » 2
  Strona 1 z 2 Następna strona