Visual C++ (winapi)

Тема в разделе "MS Visual C++", создана пользователем meon, 11 июн 2005.

Статус темы:
Закрыта.
  1. meon

    meon Гость

    Недавно начал учить 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]
     
  3. meon

    meon Гость

    Среда - 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.
     
  4. Dico

    Dico Гость

    Код (Text):
    #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);
      }

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

Поделиться этой страницей