Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++]Двигающийся эллипс (WinAPI)


Автор: Donatas 22.12.2011, 09:59
Нужно написать закрашенный любым цветом эллипс,который можно будет двигать как ярлыки на рабочем столе.Язык С++,компилятор Visual Studio 2008.
P.S Помогите пожалуйста бедному студенту получить зачет.
P.S.S Если влом писать всю прогу,то прошу хотя бы подкинуть пару идей,как это реализовывается. 

Автор: bsa 22.12.2011, 12:35

M
bsa
Для домашних заданий, курсовых и т.п. существует \"Центр Помощи\".




Тема перенесена. 

Автор: t_gran 22.12.2011, 16:16
Цитата

Помогите пожалуйста бедному студенту получить зачет

А для чего же Вы учитесь, бедный студент?

Код

#include <windows.h>

char szClassName[] = "EllipseWindowsApp";

LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message,
                                 WPARAM wParam, LPARAM lParam)
{
   switch (message)
   {
      case WM_NCHITTEST:
      {
         LRESULT currentArea = DefWindowProc(hwnd, message, wParam, lParam);

         return (HTCLIENT == currentArea) ? HTCAPTION : currentArea;
      }

      case WM_DESTROY:
         PostQuitMessage(0);
         break;
      default:
         return DefWindowProc(hwnd, message, wParam, lParam);
   }

   return 0;
}

int WINAPI WinMain(HINSTANCE hThisInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpszArgument,
                   int nCmdShow)
{
   HWND hwnd;
   MSG messages;
   WNDCLASSEX wincl;

   wincl.hInstance = hThisInstance;
   wincl.lpszClassName = szClassName;
   wincl.lpfnWndProc = WindowProcedure;
   wincl.style = CS_DBLCLKS;
   wincl.cbSize = sizeof(WNDCLASSEX);

   wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
   wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
   wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
   wincl.lpszMenuName = NULL;
   wincl.cbClsExtra = 0;
   wincl.cbWndExtra = 0;

   wincl.hbrBackground = (HBRUSH) COLOR_HIGHLIGHT;

   if (!RegisterClassEx(&wincl))
   {
      return 0;
   }

   hwnd = CreateWindowEx(0, szClassName, "", WS_POPUP, CW_USEDEFAULT,
                         CW_USEDEFAULT, 160, 100, HWND_DESKTOP, NULL,
                         hThisInstance, NULL);

   SetClassLong(hwnd, GCL_HBRBACKGROUND, (LONG)CreateSolidBrush(RGB(32,64,128))) ;    

       
   HRGN hRgn;

   RECT rc;

   GetWindowRect(hwnd, &rc);

   OffsetRect(&rc, - rc.left, - rc.top);
 
   hRgn = CreateEllipticRgnIndirect(&rc);

   SetWindowRgn(hwnd, hRgn, TRUE);
                         
   ShowWindow(hwnd, nCmdShow);

   while (GetMessage(&messages, NULL, 0, 0))
   {
      TranslateMessage(&messages);

      DispatchMessage(&messages);
   }

   return messages.wParam;
}

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