Visual C++ (winapi)

  • Автор темы meon
  • Дата начала
Статус
Закрыто для дальнейших ответов.
M

meon

Гость
#1
Недавно начал учить WINAPI, взял из книжки одну задачу, пока не знаю как реализовать:

"На диалоговой панели расположить список с именами констант системных цветов. Правее списка отобразить временное окно. Выбрать название системного цвета и нажать кнопку "Готово". После этого область временного окна должна закраситься выбранным цветом. В заголовке этого окна должно отобразится имя выбранной константы.

(С использованием GetSysColor).

Если кому не трудно, скиньте пожалуйста пример.
 
?

????

Гость
#2
Для: meon
А что за среда? И чуть непонятно что значит <!--QuoteBegin-meon+11:06:2005, 22:51 -->
<span class="vbquote">(meon @ 11:06:2005, 22:51 )</span><!--QuoteEBegin-->временное окно
[snapback]20993" rel="nofollow" target="_blank[/snapback]​
[/quote]
 
M

meon

Гость
#3
Среда - Visual C++ 6. Средствами WINAPI.
Временное окно - текущее окно, фон которого и предстоит менять по кнопке.

Я немного поискал инфы, вот нашел:
----------------------------------------------------------------------------------------------
The GetSysColor function retrieves the current color of the specified display element.Display elements are the parts of a window and the Windows display that appear on thesystem display screen.

DWORD GetSysColor( int nIndex );
Parameters nIndex specifies the display element whose color is to be retrieved. Thisparameter must be one of the following values:

Value Meaning
COLOR_BACKGROUND, Desktop.
COLOR_DESKTOP
COLOR_WINDOW Window background.

Return Values
If the function succeeds, the return value is the red, green, blue (RGB) color value that specifies the color of the given element.
---------------------------------------------------------------------------------------------

Только пока не знаю как это закодить, особенно список цветов с кнопкой выбора средствами WINAPI.
 
D

Dico

Гость
#4
Код:
#include <windows.h>

#define ID_TIMER  1

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
         PSTR szCmdLine, int iCmdShow)
  {
  static char szAppName[] = "Beeper1";
  HWND    hwnd;
  MSG     msg;
  WNDCLASSEX wndclass;

wndclass.cbSize    = sizeof (wndclass);
  wndclass.style     = CS_HREDRAW | CS_VREDRAW;
  wndclass.lpfnWndProc  = WndProc;
  wndclass.cbClsExtra  = 0;
  wndclass.cbWndExtra  = 0;
  wndclass.hInstance   = hInstance;
  wndclass.hIcon     = LoadIcon (NULL, IDI_APPLICATION);
  wndclass.hCursor    = LoadCursor (NULL, IDC_ARROW);
  wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
  wndclass.lpszMenuName = NULL;
  wndclass.lpszClassName = szAppName;
wndclass.hIconSm    = LoadIcon (NULL, IDI_APPLICATION);

  RegisterClassEx (&wndclass);

  hwnd = CreateWindow (szAppName, "Beeper1 Timer Demo",
            WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT, CW_USEDEFAULT,
            CW_USEDEFAULT, CW_USEDEFAULT,
            NULL, NULL, hInstance, NULL);

  while (!SetTimer (hwnd, ID_TIMER, 1000, NULL))
    if (IDCANCEL == MessageBox (hwnd,
              "Too many clocks or timers!", szAppName,
              MB_ICONEXCLAMATION | MB_RETRYCANCEL))
       return FALSE;

  ShowWindow (hwnd, iCmdShow);
  UpdateWindow (hwnd);

  while (GetMessage (&msg, NULL, 0, 0))
    {
    TranslateMessage (&msg);
    DispatchMessage (&msg);
    }
  return msg.wParam;
  }

LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
  {
  static BOOL fFlipFlop = FALSE;
  HBRUSH   hBrush;
  HDC     hdc;
  PAINTSTRUCT ps;
  RECT    rc;

  switch (iMsg)
    {
    case WM_TIMER :
       MessageBeep (0);

       fFlipFlop = !fFlipFlop;
       InvalidateRect (hwnd, NULL, FALSE);

       return 0;

    case WM_PAINT :
       hdc = BeginPaint (hwnd, &ps);

       GetClientRect (hwnd, &rc);

       hBrush = CreateSolidBrush (fFlipFlop ? RGB(255,0,0) :
                          RGB(0,0,255));
       FillRect (hdc, &rc, hBrush);
       EndPaint (hwnd, &ps);
       DeleteObject (hBrush);
       return 0;

    case WM_DESTROY :
       KillTimer (hwnd, ID_TIMER);
       PostQuitMessage (0);
       return 0;
    }
  return DefWindowProc (hwnd, iMsg, wParam, lParam);
  }

Тут реализована смена цветов по таймеру может поможет разобраться с Ф-цией!
 
Статус
Закрыто для дальнейших ответов.