Skąd brać nazwy klas okien? 6529 11

O temacie

Autor Trout

Zaczęty 21.02.2012 roku

Wyświetleń 6529

Odpowiedzi 11

Trout

Trout

Użytkownicy
posty50
Propsy1
  • Użytkownicy

Trout

Skąd brać nazwy klas okien?
2012-02-21, 11:37(Ostatnia zmiana: 2012-02-21, 13:13)
Witam,
Usiluję sie teraz uczyc WinApi. Doszedłem do funkcji FindWindow i tam w przykladowym programie jest ukrywanie i pokazywanie paska zadan. I tam jest FindWindow("Shell_TrayWnd", NULL). Jednak autor nie napisał skad wziął nazwe klasy dla tegoz paska zadań. A gdybym chciał teraz np popróbowac cos robic z pulpitem to gdzie powinienem szukac nazwy klasy dla pulpitu? I innych okien systemowych?
 


Trout

Trout

Użytkownicy
posty50
Propsy1
  • Użytkownicy
Czyli mogę np pobrac uchwyt do pulpitu funkcja GetWindowDesktop a potem GetWindowText pobrac od niego tytul i wykorzystac go w FindWindow? A dla innych okien?

Dlaczego odradzasz?  :wink:
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Cytuj
Czyli mogę np pobrac uchwyt do pulpitu funkcja GetWindowDesktop a potem GetWindowText pobrac od niego tytul i wykorzystac go w FindWindow? A dla innych okien?
Chyba tak... Tyle że GetDesktopWindow. Chociaż, z tego co pamiętam, to głównym oknem jest pulpit. Nie bardzo wiem, co byś chciał zrobić z pulpitem... Co do innych okien, to po prostu GetWindow.

Cytuj
Dlaczego odradzasz? :wink:  
Trochę stare jest :D

Trout

Trout

Użytkownicy
posty50
Propsy1
  • Użytkownicy
Jestem przyzwyczajony do uczenia sie starych rzeczy począwszy od 4 godzin tygodniowo Pascala w klasie II technikum xd
Czyli lepiej na platformie .NET? a GUI sie ewentualnie chociaż na studiach przyda?
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Platforma .NET jest podobno łatwiejsza i w zasadzie nie musisz się odwoływać do powłoki systemu. Całe WinApi jest opakowane i łatwiejsze w użyciu.

Nie wiem, czy lepiej się uczyć tego czy tego. Jeśli chcesz wiedzieć, jak kiedyś wyglądało programowanie GUI pod WinApi, to czemu nie? Chociaż teraz dość popularne jest technologia .NET lub Java.

Do C++ pewnie istnieją jakieś biblioteki "wyższego" poziomu, niż WinApi (chyba wxWidgets), ale w zasadzie to z nich nigdy nie korzystałem, bo okienka wolę robić w Javie :D

muttley

muttley

Użytkownicy
posty567
Propsy381
  • Użytkownicy
począwszy od 4 godzin tygodniowo Pascala w klasie II technikum xd
Japierdole.

a GUI sie ewentualnie chociaż na studiach przyda?
Z tego co wiem to na studiach głównie algorytmika, czyli pewnie będziesz w konsoli robił, szczerze uważam że studia to papierek, mogą coś dać, ale żeby być dobrym progerem trzeba samemu ogarniać.

Czyli lepiej na platformie .NET?

Pod .NET bardzo szybko napiszesz program, ale nie wiem w sumie czy lepiej.

Co do C++ (są też wersje tych bibliotek pod inne języki): GCC ssie
Qt4 - http://qt.nokia.com/ - mój faworyt :D
wxWidgets - http://www.wxwidgets.org/
Pod wxWidgets jest środowisko bazowane na Dev-C++ (podobno kogoś to może nawet zachęcić do pracy z wxWidgets) - http://wxdsgn.sourceforge.net/
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Cytuj
Pod wxWidgets jest środowisko bazowane na Dev-C++ (podobno kogoś to może nawet zachęcić do pracy z wxWidgets) - http://wxdsgn.sourceforge.net/
Nie lepiej po prostu ściągnąć Code::Blocksa, które wykorzystuje wxWidgets?

muttley

muttley

Użytkownicy
posty567
Propsy381
  • Użytkownicy
Hmm, też dobra opcja, ale jako że koleś zaczyna może nawet nie ogarnąć jak zmusić wxWidgets do działania z C::B.
 

Trout

Trout

Użytkownicy
posty50
Propsy1
  • Użytkownicy

Trout

Skąd brać nazwy klas okien?
#9 2012-02-22, 14:50(Ostatnia zmiana: 2012-02-22, 14:57)
Cytuj
Hmm, też dobra opcja, ale jako że koleś zaczyna może nawet nie ogarnąć jak zmusić wxWidgets do działania z C::B.
A jest w tym jakas filozofia? Na razie uzuwalem C::B tylko do konsoli i WinApi.
Cytuj
Nie bardzo wiem, co byś chciał zrobić z pulpitem...
W tutorialu jest zadanie, żeby napisać program, który wyświetla napis na pulpicie. Probowałem to zrobić ale niestety nie działa. Błędów żadnych nie zgłasza ale napisu nie ma. Jakby co probowałem to zrobić tak ze ten napis wyświetla sie w oknie i na pulpicie, a jak się kliknie na okno to napis się zmienia na inny.
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <string>
#include <iostream>

using namespace std;

string NazwaKlasy = "MyClass";
bool Jakinapis;
LRESULT CALLBACK WinEventProcedure (HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
    switch(Message)
    {
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        case WM_LBUTTONDOWN:
            Jakinapis = !Jakinapis;
            InvalidateRect(GetDesktopWindow(), NULL, true);
            InvalidateRect(hwnd, NULL, true);
            break;
        case WM_PAINT:
            PAINTSTRUCT ps, ps2;
            HDC hdcOkno, hdcOkno2;
            RECT Obszar, Obszar2;
            GetClientRect(hwnd, &Obszar);
            GetClientRect(GetDesktopWindow(), &Obszar2);

            string Napis = (Jakinapis ? "Napis" : "InnyNapis");
            hdcOkno = BeginPaint(GetDesktopWindow(), &ps);
            hdcOkno2 = BeginPaint(hwnd, &ps2);

            DrawText(hdcOkno, Napis.c_str(), int(Napis.length()), &Obszar2, DT_VCENTER | DT_SINGLELINE | DT_CENTER);
            DrawText(hdcOkno2, Napis.c_str(), int(Napis.length()), &Obszar, DT_VCENTER | DT_SINGLELINE | DT_CENTER);

            EndPaint(GetDesktopWindow(), &ps);
            EndPaint(hwnd, &ps2);
            cout<<Napis<<endl;
            break;
    }
    return DefWindowProc(hwnd, Message, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE, LPSTR lpszCmdLine, int nCmdShow)
{
    WNDCLASSEX KlasaOkna;

    ZeroMemory(&KlasaOkna, sizeof(WNDCLASSEX));
    KlasaOkna.cbSize = sizeof(WNDCLASSEX);
    KlasaOkna.hInstance = hThisInstance;
    KlasaOkna.lpszClassName = NazwaKlasy.c_str();
    KlasaOkna.lpfnWndProc = WinEventProcedure;
    KlasaOkna.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    KlasaOkna.hCursor = LoadCursor(NULL, IDC_ARROW);
    KlasaOkna.hbrBackground = HBRUSH (GetStockObject(WHITE_BRUSH));

    RegisterClassEx(&KlasaOkna);
    HWND hOkno;

    hOkno = CreateWindowEx(WS_EX_TOOLWINDOW,
                           NazwaKlasy.c_str(),
                           "Napis na pulpicie",
                           WS_CAPTION | WS_SYSMENU | WS_OVERLAPPED | WS_BORDER,
                           CW_USEDEFAULT,
                           CW_USEDEFAULT,
                           250,
                           50,
                           NULL,
                           NULL,
                           hThisInstance,
                           NULL);
    ShowWindow(hOkno, nCmdShow);

    MSG msgKomunikat;

    while (GetMessage(&msgKomunikat, NULL, 0, 0))
    {
        TranslateMessage(&msgKomunikat);
        DispatchMessage(&msgKomunikat);
    }

    return msgKomunikat.wParam;
}

I jeszcze propo wxWidgets. Zna ktoś jakieś sensowne tutoriale po polsku? Bo póki co kuleje z angielskim.

Co byście bardziej polecili, Jave czy c#?
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Cytuj
W tutorialu jest zadanie, żeby napisać program, który wyświetla napis na pulpicie. Probowałem to zrobić ale niestety nie działa. Błędów żadnych nie zgłasza ale napisu nie ma. Jakby co probowałem to zrobić tak ze ten napis wyświetla sie w oknie i na pulpicie, a jak się kliknie na okno to napis się zmienia na inny.
Przecież program wyświetla okno z napisem. Napisu na pulpicie w dosłownym znaczeniu chyba się nie da wyświetlić...

muttley

muttley

Użytkownicy
posty567
Propsy381
  • Użytkownicy
Napisu na pulpicie w dosłownym znaczeniu chyba się nie da wyświetlić...
Myślę, że dałoby się wstrzyknąć DLL#msg1021473kę w explorer.exe, a potem zahookować odpowiednie funkcje :D
Powodzenia.

http://cboard.cprogramming.com/windows-programming/51476-drawing-text-desktop.html#post358404 Tu jest ciekawe rozwiązanie tego problemu.
 


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry