Здравствуйте! Я начала изучать С++ и вот моя первая программа. при нажатии на картинку она меняла ме - Компьютерные вопросы
  • Чаты 4chT.com в телеграмм
    Наши группы в телеграмм

Вопрос Здравствуйте! Я начала изучать С++ и вот моя первая программа. при нажатии на картинку она меняла ме

Регистрация
7 Июн 2013
Сообщения
74
Репутация
0
Спасибо
0
Монет
0
делаю все как написано, может вопрос и глупый но у меня не получается. то не так?

// Global Variables:
HWND hWnd;
HBITMAP startBitmap;

_tWinMain. В ней, после загрузки из ресурсов текста окна и имени класса окна, добавим следующую строчку кода:

startBitmap = (HBITMAP)::LoadImage(hInstance,
MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP,
0, 0, LR_DEFAULTCOLOR);
Здесь мы переменной startBitmap присваиваем загруженную из ресурсов картинку.

переходим в функцию Initlnstance.
int Style;
Style = GetWindowLong(hWnd, GWL_STYLE);
Style=Style || WS_CAPTION;
Style=Style || WS_SYSMENU;
SetWindowLong(hWnd, GWL_STYLE, Style);

функцию WndProc, где у нас обрабатываются все события. Нас будет интересовать рисование, поэтому добавим следующий обработчик события:

case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
Rectangle(hdc, 1,1,10,10);
hdcBits=::CreateCompatibleDC(hdc);
SelectObject(hdcBits,startBitmap);
BitBlt(hdc, 0, 0, 50, 20, hdcBits, 0, 0, SRCCOPY);
DeleteDC(hdcBits);
EndPaint(hWnd, &ps);
break;
Теперь в нашем окне в левом верхнем углу будет рисоваться изображение кнопки Пуск. Остается сделать самую малость — уменьшить размер окна до размеров изображения, чтобы пользователь видел только картинку, и заставить окно двигаться. Для этого мы должны написать функцию DrawStartButton

void DrawStartButton()
{
int i;
HANDLE h;
int toppos=GetSystemMetrics(SM_CYSCREEN)-23;

//Отображаем окно
ShowWindow(hWnd, SW_SHOW);
//Установить верхнюю позицию окна в левый нижний угол экрана.
SetWindowPos(hWnd, HWND_TOPMOST, 4, toppos, 50, 20, SWP_SHOWWINDOW);
UpdateWindow(hWnd);
//Создаем пустой указатель h, который будем использовать для задержки.
h=CreateEvent(0, true, false, "et");

// Сейчас будем поднимать кнопку
// От 1 до 50 выполнять действия для изменения положения окна
for (i=0; i<50; i++)
{
toppos=toppos-4;
SetWindowPos(hWnd, HWND_TOPMOST, 4, toppos, 50, 20,
SWP_SHOWWINDOW);
WaitForSingleObject(h,15);//Задержка в 5 миллисекунд
}

// Опускаем кнопку вниз
for (i=50; i>0; i--)
{
toppos=toppos+4;
SetWindowPos(hWnd, HWND_TOPMOST, 4, toppos, 50, 20,
SWP_SHOWWINDOW);
WaitForSingleObject(h,15);//Задержка в 5 миллисекунд
}
}

в функцию _tWinMain и написать там вызов функции DrawStartButton. Я рекомендую сделать этот вызов перед циклом обработки сообщений и внутри него:

DrawStartButton();

// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
DrawStartButton();
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
 
Сверху Снизу