Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GDI+ & WM_NCPAINT 
:(
    Опции темы
shranet
Дата 12.6.2011, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 6.4.2011

Репутация: нет
Всего: нет



Привет. У меня первый пост в http://forum.vingrad.ru. (Я по русски не очень)

Проблема: Если меняешь размер окна, текст окна исчезают и снова появляется.
Как можно рисовать, как стандартным окна Windows?
Код
VOID Window::OnNcPaint(HRGN hRgn)
{
    HDC hdc = GetDCEx(this->hWnd, hRgn, DCX_WINDOW | DCX_INTERSECTRGN | DCX_CACHE | DCX_CLIPSIBLINGS);
    Graphics graphics(hdc);
    RECT rc; 
    GetWindowRect(hWnd, &rc);

    int width = rc.right - rc.left;
    int height = rc.bottom - rc.top;

    LinearGradientBrush linGrhRight(
                Rect(width - g_WindowPadding - 1, g_HeaderHeight, g_WindowPadding, height - g_WindowPadding),
                *currentColor,
                Color(255, 255, 255, 255), 180.0f, FALSE);

    graphics.DrawLine(pen, 0, 0, width, 0);

    graphics.FillRectangle(linGrhHeader, 0, 1, width, 10);

    graphics.FillRectangle(solidBrush, 0, 10, width, g_HeaderHeight - 10);
    
    if (this->windowText != NULL)
    {
        RectF rectF(10.0f, 0.0f, width, this->g_HeaderHeight);
        graphics.DrawString(this->windowText, -1, font, rectF, stringFormat, headerTextBrush);
    }



PM MAIL   Вверх
shranet
Дата 13.6.2011, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 6.4.2011

Репутация: нет
Всего: нет



Проблема решено
Код


void OnNcPaint(HWND hWnd, HRGN hRgn)
{
    HDC hdc = GetWindowDC(hWnd);
    
    RECT rc; 
    GetWindowRect(hWnd, &rc);

    int width = rc.right - rc.left;
    int height = rc.bottom - rc.top;
    
    HDC hMemory = CreateCompatibleDC(hdc);
    HBITMAP hBmp = CreateCompatibleBitmap(hdc, width, height);
    HBITMAP oldBmp = (HBITMAP)SelectObject(hMemory, hBmp);
    Graphics graphics(hMemory);

    LinearGradientBrush linGrhRight(
                        Rect(width - g_WindowPadding - 1, g_HeaderHeight, g_WindowPadding, height - g_WindowPadding),
                        *currentColor,
                        Color(255, 255, 255, 255), 180.0f, FALSE);

    LinearGradientBrush linGrhHeader(
                        Point(0, 0),
                        Point(0, 10),
                        Color(255, 255, 255, 255),   // opaque red
                        *currentColor);

    LinearGradientBrush linGrhLeft (
                        Point(0, 0),
                        Point(g_WindowPadding, 0),
                        *currentColor,
                        Color(255, 255, 255, 255));

    graphics.DrawLine(pen, 0, 0, width, 0);

    
    graphics.FillRectangle(&linGrhHeader, 0, 1, width, 10);
    
    graphics.FillRectangle(solidBrush, 0, 10, width, g_HeaderHeight - 10);

    graphics.FillRectangle(&linGrhLeft, 0, g_HeaderHeight, 
                g_WindowPadding, height - g_HeaderHeight - g_WindowBottomHeight - g_WindowPadding);
    
    graphics.FillRectangle(solidBrush, 0, height - g_WindowBottomHeight - g_WindowPadding, 
                g_WindowPadding, g_WindowBottomHeight);

    graphics.FillRectangle(&linGrhRight, width - g_WindowPadding, g_HeaderHeight, 
                g_WindowPadding, height - g_WindowBottomHeight - g_WindowBottomHeight - g_WindowPadding);
    
    graphics.FillRectangle(solidBrush, width - g_WindowPadding, height - g_WindowBottomHeight - g_WindowPadding, 
                g_WindowPadding, g_WindowBottomHeight);

    graphics.FillRectangle(solidBrush, 0, height - g_WindowPadding, width, g_WindowPadding);

    RectF rectF(10.0f, 0.0f, (float)width, (float)g_HeaderHeight);
    graphics.DrawString(L"Window Caption", -1, font, rectF, stringFormat, headerTextBrush);

    BitBlt(hdc, 0, 0, width, 30, hMemory, 0, 0, SRCCOPY);
    BitBlt(hdc, 0, 0, g_WindowPadding, height, hMemory, 0, 0, SRCCOPY);
    BitBlt(hdc, width - g_WindowPadding, 0, g_WindowPadding, height, hMemory, 0, 0, SRCCOPY);
    BitBlt(hdc, 0, height - g_WindowPadding, width, g_WindowPadding, hMemory, 0, height - g_WindowPadding, SRCCOPY);

    SelectObject(hdc, oldBmp);

    DeleteDC(hMemory);
    DeleteDC(hdc);
    DeleteObject(hBmp);
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0450 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.