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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Замена альфа-канала на цвет 
:(
    Опции темы
piritus
Дата 29.8.2009, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Здравствуйте.
Есть png с альфа-каналом, которую нужно поместить на кнопку.
Т.к. стили CHILD и LAYERED не совместимы, то я подумал, что можно
загрузить png, а потом заменить альфа-канал на какой-нибудь цвет.
Потом создать регион с установленным цветом прозрачности изображения, который (цвет) был
выбран при "раскрашивании" альфа-канала, а далее вырезать кнопку по региону.

Скажите, это возможно?
--------------------
PM MAIL ICQ   Вверх
GremlinProg
Дата 29.8.2009, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



альфа канал простым регионом не выявить,
такое решение подойдет только для прозрачности "по ключу"

на дочерних компонентах это делается примерно так: http://forum.vingrad.ru/index.php?showtopi...t&p=1849405
тут нужно просто вставить вызов AlphaBlend с функцией альфа-канала, сразу после воспроизведения фона родителя


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


Бывалый
*


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

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



Спасибо за ссылку.
Пробую по ней, но вот что выходит.
Думаю не важно, что на asm-е, суть от этого не меняется:
Код

...
.elseif uMsg == WM_PRINTCLIENT
    push wParam
    pop hdc
    invoke GetClientRect,hWin,addr rc

;    //    рисуем прозрачный фон  
    invoke GetClientRect,hWin,addr orgp
    invoke GetAncestor,hWin,GA_PARENT
;    invoke GetParent,hWin
    mov hWndTo,eax
    invoke MapWindowPoints,hWin,hWndTo,addr orgp,1
;    invoke GetWindowOrgEx,hdc,addr pt            
;    invoke SetWindowOrgEx,hdc,pt.x + orgp.x,pt.y + orgp.y,NULL
    invoke SetWindowOrgEx,hdc,100,100,NULL
    invoke GetAncestor,hWin,GA_PARENT
    invoke SendMessage,eax,WM_ERASEBKGND,hdc,0
    invoke GetAncestor,hWin,GA_PARENT
    invoke SendMessage,eax,WM_PRINTCLIENT,hdc,PRF_CLIENT
    invoke SetWindowOrgEx,hdc,pt.x,pt.y,NULL           

;    //    рисуем свое содержимое      
;    invoke GetWindowTextLength,hWin
;    text.resize( ::GetWindowTextLength(hWnd) );
    invoke GetStockObject,NULL_BRUSH
    invoke SelectObject,hdc,eax
    mov hBrush,eax
    invoke GetStockObject,DC_PEN
    invoke SelectObject,hdc,eax
    mov hPen,eax            
    RGB 0,255,0
    invoke SetDCPenColor,hdc,eax
    invoke Rectangle,hdc,0,0,50,50 ;rc.left,rc.top,rc.right,rc.bottom           
       
;    invoke InflateRect,addr rc,-1,-1       
;    invoke GetWindowText,hWin,offset text,sizeof text + 1
;;    ::GetWindowTextW(hWnd,&*text.begin(),text.size() + 1);          
;    invoke SetBkMode,hdc,TRANSPARENT            
;    invoke DrawText,hdc,offset text,sizeof text,addr rc, DT_VCENTER or DT_CENTER or DT_WORDBREAK
            
    invoke LoadIcon,NULL,IDI_EXCLAMATION
    mov hIconL,eax         
    invoke DrawIconEx,hdc,0,0,hIconL,0,0,0,NULL,DI_NORMAL         
    invoke DestroyIcon,hIconL          
    invoke SelectObject,hdc,hPen         
    invoke SelectObject,hdc,hBrush  

    ret

.elseif uMsg == WM_PAINT
    invoke BeginPaint,hWin,addr ps
    push ps.rcPaint.left
    pop x
    push ps.rcPaint.top
    pop y
    mov eax,ps.rcPaint.right
    sub eax,ps.rcPaint.left
    mov cxx,eax
    mov eax,ps.rcPaint.bottom
    sub eax,ps.rcPaint.top
    mov cyy,eax

    invoke CreateCompatibleDC,ps.hdc
    mov hDC,eax
    invoke CreateCompatibleBitmap,ps.hdc,50,50
    mov hBitmapL,eax
    invoke SelectObject,hDC,hBitmapL
    mov hBitmapL,eax
    invoke SetWindowOrgEx,hDC,x,y,NULL
    invoke SendMessage,hWin,WM_PRINTCLIENT,hDC,PRF_CLIENT
;    invoke BitBlt,ps.hdc,x,y,cxx,cyy,hDC,x,y,SRCCOPY
    invoke BitBlt,ps.hdc,0,0,50,50,hDC,0,0,SRCCOPY
    invoke SelectObject,hDC,hBitmapL
    mov hBitmapL,eax
    invoke DeleteObject,hBitmapL
    invoke DeleteDC,hDC
    invoke EndPaint,hWin,addr ps
...


Для начала пробую на главном окне отрисовать.
Вот результат выполнения этого кода:
user posted image

Если добавить:
Код

.elseif uMsg == WM_ERASEBKGND
    invoke WindowFromDC,wParam
    .if eax == hWin
        xor eax,eax
        inc eax
    .endif
    
    ret

то результат следующий:
user posted image
При перетаскивании окна, картинка сохраняется, т.е. окно не прозрачное как я понял... 
user posted image

Подскажите, в чем дело?
Может можно регионом выделить квадрат с изображением и оттуда вырезать черный цвет?


Это сообщение отредактировал(а) piritus - 30.8.2009, 12:15
--------------------
PM MAIL ICQ   Вверх
GremlinProg
Дата 30.8.2009, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



вообще-то асм читать не очень удобно,

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

твой WM_ERASEBKGND равнозначен такому:
Код

.elseif uMsg == WM_ERASEBKGND
ret

т.к. сообщение в любом случае глушится ret'ом
можно даже не утруждать себя в выставлении eax,
WindowFromDC я там ставил для перекрытия этого сообщения только если оно пришло в окно извне,
для двойного буфера оно проходит стандартно

вобщем, советую пока использовать все же С++ и WS_EX_LAYERED для главного окна,

WS_EX_LAYERED - т.к. без него прозрачность будет либо условной, либо по таймеру,
но в любом случае - используя гораздо больше ресурсов, чем это реализуется в ядре,

а не обрабатывать WM_ERASEBKGND - это не прозрачность, это просто невосстановление фона окна,
следствие на последнем скриншоте закономерно


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


Эксперт
****


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

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



попробовал объединить оба эффекта: WS_EX_LAYERED и AlphaBlend
в приложении немного переделаный примерчик из топика про прозрачность

что я в нем делаю:
сразу после воспроизведения фона родителя, рисую на нем битмап с альфа-каналом,
сам битмап - это просто квадратная палитра цветов, а альфа-канал - это круг с увеличением прозрачности к его центру, т.е. края его видны отчетливо, а центр "просвечивает", получается некоторое подобие цветной, полупрозрачной сферы

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

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

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

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

AlphaBlend можно использовать только на непрозрачные зоны,
это так же хорошо видно: область из разноцветных прямоугольников непрозрачна, поэтому на них альфа-канал работает

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

вобщем, если хочешь просвечивать PNG с неоднородной альфой абсолютно актуальным фоном десктопа или любого другого окна,
без каких-либо особых ухищрений, типа хуков, это врятли получится,
просто, на постоянном фоне - сколько угодно, но не "вперемешку с чужой [полу]прозрачностью",

Добавлено через 10 минут и 58 секунд
Цитата(GremlinProg @  30.8.2009,  21:48 Найти цитируемый пост)
без каких-либо особых ухищрений, типа хуков, это врятли получится,

конечно, всегда можно заменить дочернее окно на попап с WS_EX_LAYERED

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


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


Бывалый
*


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

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



Благодарю.
А исходник можно для большей наглядности?
--------------------
PM MAIL ICQ   Вверх
GremlinProg
Дата 30.8.2009, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



ну, тут мало изменений:
Код

// 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 <tchar.h>
#include <string>

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

#pragma comment(lib,"Msimg32")

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            = 0;
    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    = ::CreateSolidBrush( RGB(254,0,0) );
    wcex.lpszMenuName    = NULL;
    wcex.lpszClassName    = _T("TransparencyControlApplication");
    wcex.hIconSm        = ::LoadIcon( NULL, IDI_APPLICATION );
    if( ::RegisterClassEx(&wcex) ){
        hWnd = ::CreateWindowEx(
            WS_EX_LAYERED,
            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            = 0;
        wcex.lpfnWndProc    = TransparencyControl;
        wcex.cbClsExtra        = 0;
        wcex.cbWndExtra        = 0;
        wcex.hInstance        = hInstance;
        wcex.hIcon            = NULL;
        wcex.hCursor        = ::LoadCursor(NULL,IDC_ARROW);
        wcex.hbrBackground    = ::CreateSolidBrush( RGB(254,0,0) );
        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);
            }
        }
        ::SetLayeredWindowAttributes( hWnd, RGB(254,0,0), 128, LWA_COLORKEY );
        ::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_NCHITTEST:{
            return HTCAPTION;
        }
        case WM_NCCALCSIZE:{
            LPNCCALCSIZE_PARAMS lpParams    = (LPNCCALCSIZE_PARAMS)lParam;
            if( wParam ){
                ::DefWindowProc( hWnd, message, wParam, lParam );
                ::SetRectEmpty( lpParams->rgrc + 1 );
                ::SetRectEmpty( lpParams->rgrc + 2 );
                return WVR_VALIDRECTS;
            }
            break;
        }
        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);
            //
            LPRGBQUAD lpBits;
            BLENDFUNCTION bf;
            BITMAPINFO bmi;
            //
            memset( &bmi, 0, sizeof(bmi) );
            bmi.bmiHeader.biSize        = sizeof( BITMAPINFOHEADER );
            bmi.bmiHeader.biWidth        = 255;
            bmi.bmiHeader.biHeight        = 255;
            bmi.bmiHeader.biPlanes        = 1;
            bmi.bmiHeader.biBitCount    = 32;
            bmi.bmiHeader.biCompression    = BI_RGB;
            HGDIOBJ hBitmap                = ::CreateDIBSection(
                NULL,
                &bmi,
                DIB_RGB_COLORS,
                (void**)&lpBits,
                NULL,
                0
            );
            //
            for( int z,xx,yy,x, y = 255; y-- ; ){
                for( x = 255; x-- ; ){
                    RGBQUAD&rgb        = lpBits[y * 255 + x];
                    rgb.rgbBlue        = 255 - x;
                    rgb.rgbGreen    = min(x,y);
                    rgb.rgbRed        = max(x,y);
                    xx    = x - 128;
                    yy    = y - 128;
                    z    = xx*xx + yy*yy;
                    if( z < (128*128) ){
                        rgb.rgbReserved    = (BYTE)((z * 255) / (128 * 128));
                    }else{
                        rgb.rgbReserved    = 0;
                    }
                    
                }
            }
            HDC hMemDC                = ::CreateCompatibleDC( hdc );
            hBitmap                    = ::SelectObject( hMemDC, hBitmap );
            bf.BlendOp                = AC_SRC_OVER;
            bf.BlendFlags            = 0;
            bf.SourceConstantAlpha    = 255;
            bf.AlphaFormat            = AC_SRC_ALPHA;
            ::AlphaBlend( hdc,10,45,55,55,hMemDC,0,0,255,255,bf);
            hBitmap            = ::SelectObject( hMemDC, hBitmap );
            ::DeleteObject( hBitmap );
            ::DeleteDC( hMemDC );
            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;
        }
        case WM_ERASEBKGND:{
            if( ::WindowFromDC((HDC)wParam) == hWnd ){
                return TRUE;
            }
            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);
}

кстати, заметил интересное разоблачение: нужно скопировать экран с работающей программой (Alt + Print Scrn) и вставить скриншот в любой редактор, забавный способ снять "розовые очки" )


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


Бывалый
*


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

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



Интересно smile
--------------------
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1260 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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