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

[WinAPI] Problem z przykładem

Ostatnio zmodyfikowano 2011-05-21 20:48
Autor Wiadomość
Mrowqa
Temat założony przez niniejszego użytkownika
[WinAPI] Problem z przykładem
» 2011-05-18 18:18:23
Witam!

Wczoraj uczyłem się tej lekcji » Kurs WinAPI, C++ » PodstawyOkno dialogowe, cz.7 lekcja. Problem polega na tym, że u mnie ten przykład nie chce działać ;/ Tzn skopiowałem go i sprawdziłem wszystko. Dialog się wywołuje ( sprawdziłem w procedurze przez MessageBox ), ale jest niewidoczny ;/ Korzystam z VC++ 2010. Nie wiem w czym problem :/ Pewnie kolejna 'osobliwość' Visuala ... ( albo bład w przykładzie :P )

Pozdrawiam,
Mrowqa
P-33137
DejaVu
» 2011-05-18 22:37:53
Bo tam nie ma kompletnego kodu i nie da rady go złożyć tylko i wyłącznie poprzez kopiowanie zamieszczonych fragmentów.
P-33169
Mrowqa
Temat założony przez niniejszego użytkownika
» 2011-05-19 15:35:37
Przez analogię też starałem się to zrobić ... Poprawiłem trochę ( kodowanie VC++ ), ale nie chce wejść ;/ A kod po złożeniu w całość ma trochę sensu ( np. button do edita taki sam - składniowo :P ). W każdym razie nie jest mi to potrzebne ( na razie :D ) i jak co to poszukam gdzie indziej :P ( albo tu napiszę ^^ )
Dzięki :D

Pozdrawiam,
Mrowqa
P-33185
malan
» 2011-05-20 16:14:37
Może procedurę dialogową masz źle napisaną?
P-33225
Mrowqa
Temat założony przez niniejszego użytkownika
» 2011-05-21 14:15:56
Wątpię :P
To było w lekcji:
C/C++
BOOL CALLBACK DialogProc( HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam )
{
    return false;
}
Mogę wkleić kod, który złożyłem... ( o ile chcecie :D )
P-33248
malan
» 2011-05-21 14:49:17
Taką procedurę masz w kodzie? :O
P-33251
Mrowqa
Temat założony przez niniejszego użytkownika
» 2011-05-21 17:13:13
Nie :P Taka była w przykładzie :D Ja na razie się uczę. Głównie mi chodzi o to by działało :P Procedurkę łatwo 'nabazgrolić' :D To to co stworzyłem:
C/C++
BOOL CALLBACK DialogProc( HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam )
{
    if( Msg == WM_COMMAND )
    {
        MessageBox( hwnd, L"Coś przycisnąłeś ...", L"Ehh... znowu?", MB_ICONWARNING );
        EndDialog( hwnd, 0 );
    }
    return false;
}
i od razu ( skoro włączyłem Visuala :D ) kodzik tworzenia okna:
C/C++
HGLOBAL hgbl; // deklaracje
DLGTEMPLATE * pdt;
DLGITEMTEMPLATE * pdit;
WORD * pw;
LPWSTR pws;
int nchar;
// wzor w pamieci ;/
hgbl = GlobalAlloc( GMEM_ZEROINIT, 1024 ); // 1024 bajty :P
pdt =( DLGTEMPLATE * ) GlobalLock( hgbl );
pdt->style = WS_POPUP | WS_BORDER | WS_SYSMENU | DS_MODALFRAME | WS_CAPTION; // styl
pdt->cdit = 2; // liczba kontrolek
RECT rcDlg = { 10, 10, 200, 150 }; // rozmiar okna
PixelsToDialogUnits( rcDlg ); // przeliczenie rozmiarou ( j. dialogowe -> pixele )

pdt->x =( short ) rcDlg.left;
pdt->y =( short ) rcDlg.top;
pdt->cx =( short ) rcDlg.right;
pdt->cy =( short ) rcDlg.bottom;

pw =( WORD * )( pdt + 1 );
* pw++ = 0x0; // brak menu
* pw++ = 0x0; // predefiniowana klasa dialogu
pws =( LPWSTR ) pw;
nchar = 1 + MultiByteToWideChar( CP_ACP, 0, "Mój dialog", - 1, pws, 50 ); // tytul okna
pw += nchar;

pw = lpwAlign( pw );
pdit =( DLGITEMTEMPLATE * ) pw;
RECT rcBtn = { 50, 100, 100, 25 }; // przycisk
PixelsToDialogUnits( rcBtn );

pdit->x =( short ) rcBtn.left;
pdit->y =( short ) rcBtn.top;
pdit->cx =( short ) rcBtn.right;
pdit->cy =( short ) rcBtn.bottom;
pdit->id = IDOK;
pdit->style = WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON;
pw =( WORD * )( pdit + 1 );
* pw++ = 0xffff;
* pw++ = 0x0080; // przycisk
pws =( LPWSTR ) pw;
nchar = 1 + MultiByteToWideChar( CP_ACP, 0, "OK", - 1, pws, 50 ); // tresc buttona
pw += nchar;
* pw++ = 0; // brak dodatkowych danych

pw = lpwAlign( pw ); // pole edycji ( edit ) :P
pdit =( DLGITEMTEMPLATE * ) pw;

RECT rcEdit = { 25, 10, 150, 25 };
PixelsToDialogUnits( rcEdit );

pdit->x =( short ) rcEdit.left;
pdit->y =( short ) rcEdit.top;
pdit->cx =( short ) rcEdit.right;
pdit->cy =( short ) rcEdit.bottom;

pdit->id = 1000;
pdit->style = WS_CHILD | WS_VISIBLE | WS_BORDER;

pw =( WORD * )( pdit + 1 );
* pw++ = 0xffff;
* pw++ = 0x0081; // edit box

pws =( LPWSTR ) pw;
nchar = 1 + MultiByteToWideChar( CP_ACP, 0, "Tekst", - 1, pws, 50 );
pw += nchar;
* pw++ = 0; // brak dodatkowych danych

GlobalUnlock( hgbl );
DialogBoxIndirect( GetModuleHandle( NULL ),( DLGTEMPLATE * ) hgbl, hwnd,( DLGPROC ) DialogProc );
GlobalFree( hgbl );
Sry za zaśmiecanie forum :P
Więc gdzie problem ?? Gdzie przykład się mylił ( albo moje bezmyślne kopiowanie :P - ale potem sprawdziłem normalnie i analogicznie ... ).

Pozdrawiam,
Mrowqa
P-33264
malan
» 2011-05-21 20:24:58
Zmień procedurę dialogową na tą z lekcji » Kurs WinAPI, C++ » PodstawyOkna dialogowe, cz. 1 lekcja
P-33279
« 1 » 2
  Strona 1 z 2 Następna strona