проблемы WM_PAINT
От: VIp3R  
Дата: 09.03.05 10:00
Оценка:
Обработчик сообщения WM_PAINT следующий:
        hDC=BeginPaint(hwnd,&PaintStruc);
        GetObject(hImage,sizeof(BITMAP),&Bitmap);
        hCompatibleDC=CreateCompatibleDC(hDC);
        hOldBitmap=SelectObject(hCompatibleDC,hImage);
        GetClientRect(hwnd,&rect);
        BitBlt(hDC,0,0,LR_DEFAULTSIZE,LR_DEFAULTSIZE,hCompatibleDC,0,0,SRCCOPY);
        DeleteDC(hCompatibleDC);
        SelectObject(hCompatibleDC,hOldBitmap);
        EndPaint(hwnd,&PaintStruc);

Рисунок загружается при выборе пункта меню.
Проблема в том что картинка не отображается на окне при загрузке ее в hImage. Как ето исправить? Помогите пожалуйста.
... << RSDN@Home 1.1.3 stable >>
Re: проблемы WM_PAINT
От: VIp3R  
Дата: 09.03.05 10:08
Оценка:
Картинка появляется только когда я минимизирую приложение а потом максимизирую.
... << RSDN@Home 1.1.3 stable >>
Re: проблемы WM_PAINT
От: Pavel Dvorkin Россия  
Дата: 09.03.05 10:35
Оценка:
Здравствуйте, VIp3R, Вы писали:


VIR> DeleteDC(hCompatibleDC);

VIR> SelectObject(hCompatibleDC,hOldBitmap);

Это как понимать ? Сначала удаляем, потом выбираем ?
With best regards
Pavel Dvorkin
Re: проблемы WM_PAINT
От: gandalf_g Россия  
Дата: 09.03.05 10:36
Оценка:
Здравствуйте, VIp3R, Вы писали:

VIR>Обработчик сообщения WM_PAINT следующий:

VIR>
VIR>        hDC=BeginPaint(hwnd,&PaintStruc);
VIR>        GetObject(hImage,sizeof(BITMAP),&Bitmap);
VIR>        hCompatibleDC=CreateCompatibleDC(hDC);
VIR>        hOldBitmap=SelectObject(hCompatibleDC,hImage);
VIR>        GetClientRect(hwnd,&rect);
VIR>        BitBlt(hDC,0,0,LR_DEFAULTSIZE,LR_DEFAULTSIZE,hCompatibleDC,0,0,SRCCOPY);
VIR>        DeleteDC(hCompatibleDC);
VIR>        SelectObject(hCompatibleDC,hOldBitmap);
VIR>        EndPaint(hwnd,&PaintStruc);
VIR>

VIR>Рисунок загружается при выборе пункта меню.
VIR>Проблема в том что картинка не отображается на окне при загрузке ее в hImage. Как ето исправить? Помогите пожалуйста.

эммм... сначала удаляешь hCompatibleDC а потом пытаешся туда выбрать hOldBitmap. ошибка на скоко понимаю
Have fun...
Re[2]: проблемы WM_PAINT
От: VIp3R  
Дата: 09.03.05 10:40
Оценка:
Здравствуйте, gandalf_g, Вы писали:

_>эммм... сначала удаляешь hCompatibleDC а потом пытаешся туда выбрать hOldBitmap. ошибка на скоко понимаю


Ето я исправив. Но дальше картинка не отображается если интересно вот полный код:

    case WM_PAINT:
            hDC=BeginPaint(hwnd,&PaintStruc);
            GetObject(hImage,sizeof(BITMAP),&Bitmap);
            hCompatibleDC=CreateCompatibleDC(hDC);
            hOldBitmap=SelectObject(hCompatibleDC,hImage);
            GetClientRect(hwnd,&rect);
            BitBlt(hDC,0,0,LR_DEFAULTSIZE,LR_DEFAULTSIZE,hCompatibleDC,0,0,SRCCOPY);
            SelectObject(hCompatibleDC,hOldBitmap);
            DeleteDC(hCompatibleDC);            
            EndPaint(hwnd,&PaintStruc);
        break;

        case WM_COMMAND:
            switch(LOWORD(wParam))
            {
                case ID_EXIT:
                    SendMessage(hwnd,WM_CLOSE,0,0);
                break;

                case ID_OPEN:
                    OPENFILENAME of;
                    
                    ZeroMemory(&of,sizeof(of));
                    of.lStructSize=sizeof(of);
                    of.lpstrFile=cFileName;
                    of.nMaxFile=sizeof(cFileName);
                    of.nMaxFileTitle=0;
                    of.lpstrFileTitle=NULL;
                    of.lpstrFile[0]='\0';
                    of.lpstrFilter="Bitmap-files\0*.bmp\0\0";
                    GetOpenFileName(&of);
                    if (cFileName[0]!='\0')
                    {
                    hImage=LoadImage(0,cFileName,IMAGE_BITMAP,\
                                LR_DEFAULTSIZE,LR_DEFAULTSIZE,\
                          LR_LOADFROMFILE);
                        UpdateWindow(hwnd);
                        SendMessage(hwnd,WM_PAINT,0,0);
                    }
                    
                break;
            }
        break;

        case WM_DESTROY:
            DeleteObject(hImage);
            PostQuitMessage(0);
        break;
        
        default:
            return DefWindowProc(hwnd,uMsg,wParam,lParam);
    }
Re[3]: проблемы WM_PAINT
От: gandalf_g Россия  
Дата: 09.03.05 10:49
Оценка:
Здравствуйте, VIp3R, Вы писали:

VIR>Здравствуйте, gandalf_g, Вы писали:


_>>эммм... сначала удаляешь hCompatibleDC а потом пытаешся туда выбрать hOldBitmap. ошибка на скоко понимаю


VIR>Ето я исправив. Но дальше картинка не отображается если интересно вот полный код:


VIR>
VIR>    case WM_PAINT:
VIR>            hDC=BeginPaint(hwnd,&PaintStruc);
VIR>            GetObject(hImage,sizeof(BITMAP),&Bitmap);
VIR>            hCompatibleDC=CreateCompatibleDC(hDC);
VIR>            hOldBitmap=SelectObject(hCompatibleDC,hImage);
VIR>            GetClientRect(hwnd,&rect);
VIR>            BitBlt(hDC,0,0,LR_DEFAULTSIZE,LR_DEFAULTSIZE,hCompatibleDC,0,0,SRCCOPY);
VIR>            SelectObject(hCompatibleDC,hOldBitmap);
VIR>            DeleteDC(hCompatibleDC);            
VIR>            EndPaint(hwnd,&PaintStruc);
VIR>        break;


проверь правильно ли загружается битмап при открытии (проверь хэндл hImage после LoadImage)

попробуй так:
GetObject(hImage,sizeof(BITMAP),&Bitmap);
GetClientRect(hwnd,&rect);

hDC=BeginPaint(hwnd,&PaintStruc);
hCompatibleDC=CreateCompatibleDC(hDC);
hOldBitmap=SelectObject(hCompatibleDC,hImage);
BitBlt(hDC,0,0,Bitmap.bmWidth, Bitmap.bmHeight,hCompatibleDC,0,0,SRCCOPY);
SelectObject(hCompatibleDC,hOldBitmap);
EndPaint(hwnd,&PaintStruc);
Have fun...
Re[4]: проблемы WM_PAINT
От: VIp3R  
Дата: 09.03.05 11:05
Оценка:
Картинка загружается правильно. После того как загрузил картинку мне ее надо нарисовать на окне, посилаю сообщение WM_PAINT, но картинки нет. Если взять и minimize приложение а потом restore тогда картинка видна на окне. Почему не работает сообщение WM_PAINT?
Re[5]: проблемы WM_PAINT
От: rus blood Россия  
Дата: 09.03.05 11:09
Оценка:
Здравствуйте, VIp3R, Вы писали:

VIR>Картинка загружается правильно. После того как загрузил картинку мне ее надо нарисовать на окне, посилаю сообщение WM_PAINT, но картинки нет. Если взять и minimize приложение а потом restore тогда картинка видна на окне. Почему не работает сообщение WM_PAINT?


Используй InvalidateRect
Имею скафандр — готов путешествовать!
Re[5]: проблемы WM_PAINT
От: gandalf_g Россия  
Дата: 09.03.05 11:11
Оценка:
Здравствуйте, VIp3R, Вы писали:

VIR>Картинка загружается правильно. После того как загрузил картинку мне ее надо нарисовать на окне, посилаю сообщение WM_PAINT, но картинки нет. Если взять и minimize приложение а потом restore тогда картинка видна на окне. Почему не работает сообщение WM_PAINT?


попробуй RedrawWindow, или InvalidateRect c размерами картинки
Have fun...
Re[6]: проблемы WM_PAINT
От: VIp3R  
Дата: 09.03.05 11:18
Оценка:
Спасибо. Мне эти функции помогли.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.