Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Перемещение окна потомка по окну предка


Автор: GIK 18.1.2009, 13:08
Всем доброго времени суток.
Есть главное окно программы, в ней есть еще одно окно-потомок, пусть к примеру будет BUTTON. Я хочу реализовать плавное перемещение этого окна-потомка в пределах главного окна. Меня интересует, если я отрисую  картинку на этой кнопке, я могу ее протсто перемещать, или отрисовку надо производить постоянно? У меня почему-то неполучается перемещать картинку :( Делаю я это примерно так:

Код

HBITMAP startBitmap; 
startBitmap = (HBITMAP)::LoadImage(hInstance,
                   MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP,
                   0, 0, LR_DEFAULTCOLOR); 
.............................
.............................

HWND hButton2;   
//сОЗДАЕМ ОКНО, пусть будет "кнопка"
hButton2=CreateWindow("BUTTON", "Button", WS_CHILD|WS_VISIBLE,
                 80, 10, 70, 30,  hWnd, (HMENU)(122), hInst, NULL); 

//Вытаскиваем контекст окна-кнопка
hdc2=BeginPaint(hButton2, &ps); 
//копируем контекст
hdcBits=::CreateCompatibleDC(hdc2);
//Загружаем картинку-делаем "выбор" картинки в контекст
SelectObject(hdcBits,startBitmap); 
//Копируем картинку                                    
BitBlt(hdc2, 0, 0, 70, 50, hdcBits, 0, 0, SRCCOPY);
DeleteDC(hdcBits); 
EndPaint(hButton2, &ps);

    ShowWindow(hButton2, 150);
    UpdateWindow(hButton2); 
...................................................
...................................................


//Перемещение окна-картинки

HANDLE hah;
     hah=CreateEvent(0, true, false, "et");
    
     for (i=0; i<10; i++)
     {
        pxpy+=4;
         //Óñòàíîâêà ïîçèöèè 
    SetWindowPos(hButton2, HWND_TOPMOST, 4, pxpy, 70, 30, SWP_SHOWWINDOW);

    WaitForSingleObject(hah,100);//Çàäåðæêà â x ìèëëèñåêóíä
    }

......................
.................................

  
Объясните поалуста в чем может быть причина, и если можно по подробнее.

Автор: BorisVorontsov 19.1.2009, 15:10
Это какой-то ужас, а не код. Кнопка сама позволяет устанавливать изображение -- BS_ICON/BS_BITMAP+BM_SETIMAGE. А если производишь самостоятельную отрисовку, то у кнопки должен быть стиль BS_OWNERDRAW, и рисовать ты должен в обработке сообщения WM_DRAWITEM

Автор: GIK 19.1.2009, 18:37
Цитата

кнопки должен быть стиль BS_OWNERDRAW, и рисовать ты должен в обработке сообщения WM_DRAWITEM 

 smile 

Автор: BorisVorontsov 20.1.2009, 11:09
http://www.codeguru.com/cpp/controls/buttonctrl/article.php/c5157

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)