Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> custom button 
:(
    Опции темы
Emura
Дата 21.4.2009, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо! smile
Буду разбираться. Отпишусь о результате.

Посмотрел  smile работает!
 
теперь вопрос smile Это дело буферизиривать реально? Чтобы при ресайзе не подмигивало.




PS: была бы возможность поставил плюс! 
имхо, ограничение в 100 сообщений - совсем лишее.

Это сообщение отредактировал(а) Emura - 21.4.2009, 19:22
PM   Вверх
GremlinProg
Дата 21.4.2009, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



Цитата(Emura @  21.4.2009,  20:57 Найти цитируемый пост)
Это дело буферизиривать реально?

ну, это немного другой вопрос
буферизировать, конечно, реально
но эффект от этого будет не полный, поскольку на WS_EX_TRANSPARENT об этой буферизации ни чего не знает

хотя в XP этот недочет можно устранить:
поставь родительскому окну стиль WS_EX_COMPOSITED, при создании (это встроенная буферизация)
после этого, дополнительно, ни чего буферизировать не потребуется


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Emura
Дата 21.4.2009, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ага, заработало. GremlinProg, Спасибо! 

А какой негатив от WS_EX_COMPOSITED может проявится? На Висту эта опция распространяется?
PM   Вверх
GremlinProg
Дата 21.4.2009, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



негатива 2 штуки:
1. не видно некоторых операций с мышью, при которых какие-нибудь кнопки меняют состояние
2. подержка этого флага только в XP (и более ни где)

по сути, WS_EX_TRANSPARENT с ним и должен использоваться, но раз в последующих версиях WS_EX_COMPOSITED удален, а WS_EX_TRANSPARENT остался, то можно предположить, что эту проблему:
Цитата(GremlinProg @  21.4.2009,  22:11 Найти цитируемый пост)
но эффект от этого будет не полный, поскольку на WS_EX_TRANSPARENT об этой буферизации ни чего не знает

там решили, т.е. в последующих ручная двойная буферизация  будет работать полноценно

я не тестировал это в висте, точно не скажу, может есть люди, готовые проверить?
пример на оба варианта дам, нужно будет только зафиксировать между ними визуальную разницу
есть желающие?


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
GremlinProg
Дата 21.4.2009, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



похоже, есть еще один негатив, с AlphaBlend:
http://connect.microsoft.com/VisualStudio/...edbackID=100477


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Emura
Дата 21.4.2009, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Да уж.. не обнадеживает. Чтож так все антипрозрачно с этой прозрачностью.

Кстати а можно на лету вкл\ выкл WS_CLIPCHILDREN ?
Если можно, то к примеру 
1. при показе родителя WS_CLIPCHILDREN выкл, 
2. копируем фон родителя 
3. вкл WS_CLIPCHILDREN
4. используем скопируемый фон для отрисовки потомков как душе угодно

или это бред?



Это сообщение отредактировал(а) Emura - 21.4.2009, 21:16
PM   Вверх
GremlinProg
Дата 21.4.2009, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



если нужна двойная буферизация, то делай как советовал Andrey44
возможно даже не придется отключать WS_CLIPCHILDREN (если копировать фон не с родителя, а с самого себя)

Добавлено через 4 минуты и 39 секунд
хотя сечас вот, засомневался

если WS_CLIPCHILDREN не убирать, то все равно придется фон родителя воспроизводить на прозрачном окне по-новой
(хотя это и не проблема, если фон известен, например: статическая картинка)

Добавлено через 10 минут и 43 секунды
Цитата(Emura @  21.4.2009,  23:10 Найти цитируемый пост)

1. при показе родителя WS_CLIPCHILDREN выкл,
2. копируем фон родителя
3. вкл WS_CLIPCHILDREN
4. используем скопируемый фон для отрисовки потомков как душе угодно

а, без разницы, сам подумай,
если использовать экран в качестве буфера заднего фона, то он в любом случае ОБНОВИТСЯ ДВАЖДЫ:
1. прорисуется родитель
2. прорисуется дочерний, затирая родителя

даже если это обновление будет не частым, моргание будет видно


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Emura
Дата 21.4.2009, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



GremlinProg 
Да,я тоже сомневаюсь. 

Andrey44:
Цитата

А делал я так. Брал HDC родительского окна брал из его битмапа область над которой находится кнопка и рисовал ее на саму кнопку


Взять область при WS_CLIPCHILDREN не получится. Она то как раз и вырезана, там нет фона из-за WS_CLIPCHILDREN.
А использовал он WS_CLIPCHILDREN или нет я так и не понял, скорее всего нет, если у него получилось то, что он описал.

Цитата

хотя это и не проблема, если фон известен, например: статическая картинка

возможно, а если она стретчится. в зависимости о размера окна это не вариант.. 
проблем нет если родитель одноцветен.

аа понял, впринципе да, согласен на счет картинки. точно! А вот если градиент программно рисуем? то тут нифига.

Это сообщение отредактировал(а) Emura - 21.4.2009, 21:35
PM   Вверх
GremlinProg
Дата 21.4.2009, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



Цитата(Emura @  21.4.2009,  23:29 Найти цитируемый пост)
возможно, а если она стретчится. в зависимости о размера окна это не вариант..

я конкретно в таком случае использовал IPicture::Render, т.е. именно воспроизвожу статический рисунок (с растяжкой)
прекрасно работало, попробуй

Добавлено через 2 минуты и 28 секунд
родитель же известен, следовательно его координаты - тоже
можно спокойно идентифицировать свой участок фона, даже с учетом масштабирования

Добавлено через 7 минут
Цитата(Emura @  21.4.2009,  23:29 Найти цитируемый пост)
Взять область при WS_CLIPCHILDREN не получится. Точнее получится, но будет она прозрачна

да, похоже, область будет прозрачна вплоть до первого пра-родителя, с включенным WS_CLIPCHILDREN, а при отсутствии таковых - будет светиться десктоп и все, что на нем в данный момент


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
GremlinProg
Дата 21.4.2009, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



вообще, я уже писал про WM_PRINT и WM_PRINTCLIENT - очень удобно, и воспроизводить по- сути - ни чего не нужно, и поддержка этих сообщений уже встроена на уровне системных компонент (EDIT, COMBO, TOOLBAR, и т.п.)

рисование второго буфера тогда сводится к посылке самому себе WM_PRINT/CLIENT,
то же самое касается и родителя (WS_CLIPCHILDREN используется только в BeginPaint, так что буфера в памяти это не каснется)
чтобы получить часть родителя, достаточно создать девайс в памяти и послать его с WM_PRINT/CLIENT, а дальше - действительно - делай шо хошь


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Emura
Дата 22.4.2009, 03:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



на счет WM_PRINT и WM_PRINTCLIENT 
попробовал стащить битмап с родителя, что-то не вышло (если имелось ввиду это) . Видимо от того что я отрисовываю в WM_PAINT или фиг знает.. С помощью WM_PRINT можно получить hdc окна без вырезок под контролы-потомки? 
GremlinProg, разъясни пожалуйста.


ps. 
по сути если использовать картинку для фона то тогда практически в любых ситуациях можно сотворить прозрачность. но хочется без лишних ресурсов обойтись.


у кого виста под рукой протестите пожалуйста: 
http://forum.vingrad.ru/index.php?showtopi...t&p=1848827




Это сообщение отредактировал(а) Emura - 22.4.2009, 03:32
PM   Вверх
Andrey44
Дата 22.4.2009, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

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



Цитата(Emura @  21.4.2009,  21:29 Найти цитируемый пост)
А использовал он WS_CLIPCHILDREN или нет я так и не понял, скорее всего нет, если у него получилось то, что он описал.


WS_CLIPCHILDREN я не использовал, и WS_EX_TRANSPARENT тоже.



--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
GremlinProg
Дата 22.4.2009, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



с WM_PRINT'ом и с двойным буфером, это будет выглядеть так:
Код

// transparency.cpp : Defines the entry point for the application.
//
#define WIN32_LEAN_AND_MEAN             // Exclude rarely-used stuff from Windows headers
#include <windows.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include <string>

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

int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){
    MSG msg;
    WNDCLASSEX wcex;
    HWND hWnd,hWndChild;
    //
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);
    //
    wcex.cbSize            = sizeof(WNDCLASSEX);
    wcex.style            = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra        = 0;
    wcex.cbWndExtra        = 0;
    wcex.hInstance        = hInstance;
    wcex.hIcon            = ::LoadIcon(NULL,IDI_APPLICATION);
    wcex.hCursor        = ::LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground    = ::GetSysColorBrush(COLOR_BTNFACE);
    wcex.lpszMenuName    = NULL;
    wcex.lpszClassName    = _T("TransparencyControlApplication");
    wcex.hIconSm        = ::LoadIcon(NULL,IDI_APPLICATION);
    if( ::RegisterClassEx(&wcex) ){
        hWnd = ::CreateWindowEx(
            0,
            wcex.lpszClassName,
            _T("пример для флага WS_EX_TRANSPARENT"),
            WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,
            CW_USEDEFAULT,0,
            350,350,NULL,NULL,
            hInstance,NULL
        );
        if(!hWnd){
            return FALSE;
        }
        wcex.style            = CS_PARENTDC;
        wcex.lpfnWndProc    = TransparencyControl;
        wcex.cbClsExtra        = 0;
        wcex.cbWndExtra        = 0;
        wcex.hInstance        = hInstance;
        wcex.hIcon            = NULL;
        wcex.hCursor        = ::LoadCursor(NULL,IDC_ARROW);
        wcex.hbrBackground    = NULL;
        wcex.lpszMenuName    = NULL;
        wcex.lpszClassName    = _T("TransparencyControl");
        wcex.hIconSm        = NULL;
        if( ::RegisterClassEx(&wcex) ){
            hWndChild    = ::CreateWindowEx(
                0,
                wcex.lpszClassName,
                _T("Иконка IDI_EXCLAMATION на фоне текста с прозрачным фоном\r\nразноцветные прямоугольники рисуются на родителе"),
                WS_CHILD,50,50,150,150,
                hWnd,NULL,
                hInstance,NULL
                );
            if( hWndChild ){
                ::ShowWindow(hWndChild, nCmdShow);
            }
        }
        ::ShowWindow(hWnd, nCmdShow);
        ::UpdateWindow(hWnd);
    }
    while(::GetMessage(&msg, NULL, 0, 0)){
        ::TranslateMessage(&msg);
        ::DispatchMessage(&msg);
    }
    return(int)msg.wParam;
}
LRESULT CALLBACK TransparencyControl(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
    switch( message ){
        case WM_PRINTCLIENT:{
            RECT rc;
            POINT pt,org;
            std::wstring text;
            HDC hdc;
            HGDIOBJ hBrush,hPen;
            HICON hIcon;
            //
            hdc    = (HDC)wParam;
            ::GetClientRect(hWnd,&rc);
            //    рисуем прозрачный фон
            org    = (POINT&)rc;
            ::MapWindowPoints(hWnd,::GetAncestor(hWnd,GA_PARENT),&org,1);
            ::GetWindowOrgEx(hdc,&pt);
            ::SetWindowOrgEx(hdc,pt.x + org.x,pt.y + org.y,NULL);
            ::SendMessage(::GetAncestor(hWnd,GA_PARENT),WM_ERASEBKGND,(WPARAM)hdc,0);
            ::SendMessage(::GetAncestor(hWnd,GA_PARENT),WM_PRINTCLIENT,(WPARAM)hdc,PRF_CLIENT);
            ::SetWindowOrgEx(hdc,pt.x,pt.y,NULL);
            //    рисуем свое содержимое
            text.resize( ::GetWindowTextLength(hWnd) );
            hBrush    = ::SelectObject(hdc,::GetStockObject(NULL_BRUSH));
            hPen    = ::SelectObject(hdc,::GetStockObject(DC_PEN));
            ::SetDCPenColor(hdc,RGB(0,255,0));
            ::Rectangle(hdc,rc.left,rc.top,rc.right,rc.bottom);
            if( !text.empty() ){
                ::InflateRect(&rc,-1,-1);
                ::GetWindowTextW(hWnd,&*text.begin(),text.size() + 1);
                ::SetBkMode(hdc,TRANSPARENT);
                ::DrawTextW(hdc,text.c_str(),text.size(),&rc, DT_VCENTER | DT_CENTER | DT_WORDBREAK);
            }
            hIcon    = ::LoadIcon(NULL,IDI_EXCLAMATION);
            ::DrawIconEx(hdc,0,0,hIcon,0,0,0,NULL,DI_NORMAL);
            ::DestroyIcon(hIcon);
            ::SelectObject(hdc,hPen);
            ::SelectObject(hdc,hBrush);
            break;
        }
        case WM_PAINT:{
            PAINTSTRUCT ps;
            HDC hdc;
            HGDIOBJ hBitmap;
            int x,y,cx,cy;
            //
            ::BeginPaint(hWnd,&ps);
            x        = ps.rcPaint.left;
            y        = ps.rcPaint.top;
            cx        = ps.rcPaint.right - ps.rcPaint.left;
            cy        = ps.rcPaint.bottom - ps.rcPaint.top;
            hdc        = ::CreateCompatibleDC(ps.hdc);
            hBitmap    = ::CreateCompatibleBitmap(ps.hdc,cx,cy);
            hBitmap    = ::SelectObject(hdc,hBitmap);
            ::SetWindowOrgEx(hdc,x,y,NULL);
            //
            ::SendMessage(hWnd,WM_PRINTCLIENT,(WPARAM)hdc,PRF_CLIENT);
            ::BitBlt(ps.hdc,x,y,cx,cy,hdc,x,y,SRCCOPY);
            //
            hBitmap    = ::SelectObject(hdc,hBitmap);
            ::DeleteObject(hBitmap);
            ::DeleteDC(hdc);
            ::EndPaint(hWnd,&ps);
            break;
        }
    }
    return::DefWindowProc(hWnd,message,wParam,lParam);
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam){
    switch( message ){
        case WM_PRINTCLIENT:{
            RECT rc;
            HGDIOBJ hPen;
            HDC hdc;
            //
            hdc    = (HDC)wParam;
            ::SetRect(&rc,10,10,160,160);
            hPen    = ::SelectObject(hdc,::GetStockObject(DC_PEN));
            for(int i = 10;i--;){
                if(i & 1){
                    ::SetDCPenColor(hdc,RGB(255,0,0));
                }else{
                    ::SetDCPenColor(hdc,RGB(0,0,255));
                }
                ::Rectangle(hdc,rc.left,rc.top,rc.right,rc.bottom);
                ::InflateRect(&rc,-3,-3);
            }
            ::SelectObject(hdc,hPen);
            break;
        }
        case WM_ERASEBKGND:{
            if( ::WindowFromDC((HDC)wParam) == hWnd ){
                return TRUE;
            }
            break;
        }
        case WM_PAINT:{
            PAINTSTRUCT ps;
            HDC hdc;
            HGDIOBJ hBitmap;
            int x,y,cx,cy;
            //
            ::BeginPaint(hWnd,&ps);
            x        = ps.rcPaint.left;
            y        = ps.rcPaint.top;
            cx        = ps.rcPaint.right - ps.rcPaint.left;
            cy        = ps.rcPaint.bottom - ps.rcPaint.top;
            hdc        = ::CreateCompatibleDC(ps.hdc);
            hBitmap    = ::CreateCompatibleBitmap(ps.hdc,cx,cy);
            hBitmap    = ::SelectObject(hdc,hBitmap);
            ::SetWindowOrgEx(hdc,x,y,NULL);
            //
            ::SendMessage(hWnd,WM_ERASEBKGND,(WPARAM)hdc,0);
            ::SendMessage(hWnd,WM_PRINTCLIENT,(WPARAM)hdc,PRF_CLIENT);
            ::BitBlt(ps.hdc,x,y,cx,cy,hdc,x,y,SRCCOPY);
            //
            hBitmap    = ::SelectObject(hdc,hBitmap);
            ::DeleteObject(hBitmap);
            ::DeleteDC(hdc);
            ::EndPaint(hWnd,&ps);
            break;
        }
        case WM_DESTROY:{
            ::PostQuitMessage(0);
            break;
        }
    }
    return::DefWindowProc(hWnd, message, wParam, lParam);
}


Добавлено через 12 минут и 39 секунд
WS_EX_TRANSPARENT этот пример конечно не касается, он здесь не используется, просто забыл заголовки поправить, но, тем не менее, этот пример переносим на любую ось, а эффект такой же, как и с WS_EX_TRANSPARENT | WS_EX_COMPOSITED (если, конечно неклиентскую область рисовать так же, через буфер)

т.е., все негативы снимаются, кроме главного, сопутствующего вообще двойным буферам: при большом количестве таких дочерних компонент, будет заметно общее притормаживание вывода графики (хотя это вопрос оптимизации GUI, т.е. грамотного планирования интерфейса: не должно у пользователя перед глазами маячить сотни кнопок на одной форме, для него это комфорту не прибавит)

Присоединённый файл ( Кол-во скачиваний: 26 )
Присоединённый файл  transparency.rar 26,93 Kb


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Emura
Дата 22.4.2009, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Andrey44
Цитата

WS_CLIPCHILDREN я не использовал, и WS_EX_TRANSPARENT тоже.

Спасибо за уточнения!  smile Интересно и мельтешня контролов устраивала?? smile 


GremlinProg
Сейчас посмотрим.


Это сообщение отредактировал(а) Emura - 22.4.2009, 14:50
PM   Вверх
Emura
Дата 22.4.2009, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Такс, посмотрел код. GremlinProg, очередной респект. 

вопрос:

Как я понял отрисовывается так:

а). родитель отрисовывается, путем отсылки самому себе  WM_PRINTCLIENT. Вся отрисовка находится в WM_PRINTCLIENT. а в WM_PAINT только двойная буферизация и вывод.

б). контрол отрисовывается таким же способом, но перед отрисовкой в WM_PRINTCLIENT отсылаем еще и родителю сообщение WM_PRINTCLIENT, который отрисовывает сам себя и возвращает нам hdc. который мы используем, чтобы сделать контрол "прозрачным".

Так ли я понял?  smile


Кстати, можно ведь попробовать обойтись и без WM_PRINTCLIENT. Создаем например: 
1. метод который рисует контрол, например DrawBuffer(), возвращающий тотже hdc или bitmap, даже параметры для метода замутить, чтото вроде (_возвращаем всю область || _возвращаем нужный квадрат) 
2. метод который выводит, например Draw().
Код

Draw(
DrawBuffer();
)

3. и при отрисовки потомка обращаемся к методу родителя DrawBuffer(), и получаем то что хотели
Код

Draw(
DrawBuffer(parent->DrawBuffer(нужный_квадрат));
)
 
Правильно мыслю? Поправьте если что не так. 
Естесственно это относится в большей степени к самописным контролам.

Цитата

 т.е., все негативы снимаются, кроме главного, сопутствующего вообще двойным буферам: при большом количестве таких дочерних компонент, будет заметно общее притормаживание вывода графики (хотя это вопрос оптимизации GUI, т.е. грамотного планирования интерфейса: не должно у пользователя перед глазами маячить сотни кнопок на одной форме, для него это комфорту не прибавит)

Согласен, само собой.

ps наконец-то проблема вроде решается причем без негативных моментов и сложного то ничего нет, всё просто до безобразия  smile 


Это сообщение отредактировал(а) Emura - 22.4.2009, 16:07
PM   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




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


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

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