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

[WinApi] Okno dialogowe odczytu pliku, a kopiowanie nazwy pliku po kliknięciu.

Ostatnio zmodyfikowano 2014-07-19 16:04
Autor Wiadomość
DzanoMaro
Temat założony przez niniejszego użytkownika
[WinApi] Okno dialogowe odczytu pliku, a kopiowanie nazwy pliku po kliknięciu.
» 2014-07-19 14:30:03
Siemka. :)
Jestem nowy na forum to mój pierwszy post, więc proszę o wyrozumiałość.

Od niedawna robię kurs z tej strony poświęconej WinApi.
Mam jeden problem z kodem z tego kursu http://cpp0x.pl/kursy​/Kurs-WinAPI-C++/Podstawy​/Okna-dialogowe-cz-6/189.

Mianowicie po otworzeniu okna dialogowego i kliknięciu na plik np. bitmapy nazw pliku powinna zostać skopiowana do buforu, lecz tak się nie dzieje i bufor jest pusty.

Tu fragment kodu:
C/C++
LPSTR buffer;

UINT_PTR CALLBACK OFNHookProc( HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam )
{
   
    switch( uiMsg )
    {
    case WM_NOTIFY:
        {
            NMHDR * pnmhdr =( NMHDR * ) lParam;
            OFNOTIFY * ofnot =( OFNOTIFY * ) lParam;
           
            if( pnmhdr->code == CDN_SELCHANGE )
            {
               
               
                SendMessage( hdlg, CDM_GETFILEPATH, sizeof( buffer ),( LPARAM ) & buffer );
               
                MessageBox( NULL, buffer, "zawartosc bufora", MB_ICONEXCLAMATION | MB_OK );
                FreeBitmap();
                g_hBitmap =( HBITMAP ) LoadImage( GetModuleHandle( NULL ), buffer, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
               
               
               
               
            }
            else if( pnmhdr->code == CDN_FILEOK )
            {
               
                FreeBitmap();
            }
        }
        break;
        return 0;
    }
Powiecie dlaczego tak jest?
Oraz jak to naprawić?
Pewnie to jakiś głupi błąd a nie umiem się go doszukać ;(

Z góry dzięki za pomoc.
Pozdro.
P-114034
pekfos
» 2014-07-19 14:46:42
http://msdn.microsoft.com​/en-us/library/windows/desktop​/ms646847%28v=vs.85%29.aspx
wParam
The size, in characters, of the lParam buffer. For the ANSI version, this is the number of bytes; for the Unicode version, this is the number of characters.

lParam
A pointer to the buffer that receives the file name and path.
W obu ww argumentach podajesz błędne wartości. W sumie sporo szczęścia, że tylko nic się nie dzieje..
P-114037
DzanoMaro
Temat założony przez niniejszego użytkownika
» 2014-07-19 16:04:14
Już sobie poradziłem. ;)

jeśli ktoś też ma problem to wklejam nowy kod ;)

C/C++
case WM_NOTIFY:
{
    NMHDR * pnmhdr =( NMHDR * ) lParam;
    char buffer[ MAX_PATH ] = ""; //deklaracja bufora
   
    if( pnmhdr->code == CDN_SELCHANGE )
    {
        SendMessage( GetParent( hdlg ), CDM_GETFILEPATH,( WPARAM ) MAX_PATH,( LPARAM ) buffer );
        //używajac flagi OFN_EXPLORER, to hwnd w hooku określa 'child dialog', przez co musimy użyć funkcji GetParent
       
        FreeBitmap();
        g_hBitmap =( HBITMAP ) LoadImage( GetModuleHandle( NULL ), buffer, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
        InvalidateRect( hdlg, NULL, true ); //wymuszana WM_PAINT
       
    }

Zamykam temat.
P-114044
« 1 »
  Strona 1 z 1