Автор темы
Codeby Academy
Практика и мастерство
От основ до продвинутого — программы для практиков Codeby.
К курсу →
Автор темы
Симпатично. Можете добавить возможность менять фоновою картинку и по возможности стрелки на сои?
Dock1100
Понимаете, я не использовал ни одной картинки и ни одного спрайта. Все рисуется программным путем. Для того чтобы добавить такую возможность мне придется половину программы переписать.
И еще, что значит "сои" ?))
Понимаете, я не использовал ни одной картинки и ни одного спрайта. Все рисуется программным путем. Для того чтобы добавить такую возможность мне придется половину программы переписать.
И еще, что значит "сои" ?))
lazybiz ...
Скорее всего Dock имел ввиду СВОИ, опечатка, многим людям нужен выбор!
В каком Визуале С++ пишешь? Простенько и симпатично, у нас все гениальное просто !!!
Весит мало и систему не тянет, молодец ...
:welcome: Doсk !
Сто лет не слышал ...
Скорее всего Dock имел ввиду СВОИ, опечатка, многим людям нужен выбор!
В каком Визуале С++ пишешь? Простенько и симпатично, у нас все гениальное просто !!!
Весит мало и систему не тянет, молодец ...
:welcome: Doсk !
Сто лет не слышал ...
George
Я не пишу в Visual C++, может знаете есть такой компилятор Open Watcom ? Так вот я предпочитаю именно его)) По мне очень удобный, оптимизирует отлично, но больше всего мне нравится то, что в нем можно аккуратно кастомизировать, так сказать, вставки на ассемблере (вот здесь можете посмотреть: http://www.azillionmonkeys.com/qed/watcom.html).
По поводу того что каждому нужен выбор я с вами согласен, но у меня идеология такая что не позволяет использовать битмэпы. Я считаю что идеальная программа (которая связана с UI) должна все рисовать программным путем, можете конечно судить но все же это мое мнение:welcome:
Я не пишу в Visual C++, может знаете есть такой компилятор Open Watcom ? Так вот я предпочитаю именно его)) По мне очень удобный, оптимизирует отлично, но больше всего мне нравится то, что в нем можно аккуратно кастомизировать, так сказать, вставки на ассемблере (вот здесь можете посмотреть: http://www.azillionmonkeys.com/qed/watcom.html).
По поводу того что каждому нужен выбор я с вами согласен, но у меня идеология такая что не позволяет использовать битмэпы. Я считаю что идеальная программа (которая связана с UI) должна все рисовать программным путем, можете конечно судить но все же это мое мнение:welcome:
Конечно знаю ...компилятор Open Watcom
Все правильно , в чем считаешь удобней, это решать только Вам ...По мне очень удобный
Доброй работы, береги себя ... :welcome:
Если кто загружал, мне интересны мнения у кого, как и на какой ОС работает, были ли какие глюки или нет, т.к. я испытывал только на 7-ке. Заранее благодарен, т.к. для меня это важно.
У меня тоже 7 стоит, работает без глюков. А можно по интересоватся , прозрачность делается через WinApi?
Dock1100
Да. Создается окно (CreateWindowEx) с EX-стайлом WS_EX_LAYERED. Далее создается DIB Section (CreateDIBSection), которая в конечном итоге накладывается на прозрачное окно. А уж потом собственно вызывается UpdateLayeredWindow (когда все окно необходимо обновить).
Если интересно могу выслать простенький пример на почту. Из него я думаю Вам все будет понятно. Хотя.. что почта, через 10 минут сюда выложу.
Да. Создается окно (CreateWindowEx) с EX-стайлом WS_EX_LAYERED. Далее создается DIB Section (CreateDIBSection), которая в конечном итоге накладывается на прозрачное окно. А уж потом собственно вызывается UpdateLayeredWindow (когда все окно необходимо обновить).
Если интересно могу выслать простенький пример на почту. Из него я думаю Вам все будет понятно. Хотя.. что почта, через 10 минут сюда выложу.
Обращаю внимание что данный код писался для Open Watcom C++ (кстати сам код на языке С, не С++).
Так же обращаю внимание на то, что перед вызовом функции layer_update() необходимо предумножить каждый пиксель на свою компоненту A (alpha, коэффициент прозрачности).
Dock1100, если что-то станет не понятно могу пояснить.
Так же обращаю внимание на то, что перед вызовом функции layer_update() необходимо предумножить каждый пиксель на свою компоненту A (alpha, коэффициент прозрачности).
Dock1100, если что-то станет не понятно могу пояснить.
C++:
#define _WIN32_WINNT 0x0501
#include <windows.h>
#define W 256
#define H 256
typedef unsigned long u32;
static char * g_app_class_name = "test_layer_32";
static HWND g_hWnd;
static HDC g_hDC;
static HBITMAP g_hDIB;
static u32 * p_layer;
static void layer_update( void )
{
RECT rc;
SIZE sz_dst;
POINT pt_dst;
POINT pt_src = { 0, 0 };
BLENDFUNCTION blend;
GetWindowRect( g_hWnd, &rc );
pt_dst.x = rc.left;
pt_dst.y = rc.top;
sz_dst.cx = W;
sz_dst.cy = H;
blend.BlendOp = AC_SRC_OVER;
blend.BlendFlags = 0;
blend.SourceConstantAlpha = 255;
blend.AlphaFormat = AC_SRC_ALPHA;
UpdateLayeredWindow( g_hWnd, NULL, &pt_dst, &sz_dst, g_hDC, &pt_src, 0, &blend, ULW_ALPHA );
}
static LRESULT CALLBACK layer_proc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch ( uMsg ) {
case WM_NCHITTEST: return HTCAPTION;
case WM_KEYDOWN:
if ( (int)wParam != VK_ESCAPE ) break;
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hWnd, uMsg, wParam, lParam );
}
int APIENTRY WinMain( HINSTANCE hInst, HINSTANCE hPInst, LPSTR lpCmdLine, int nCmdShow )
{
u32 i;
MSG msg;
WNDCLASS wc;
BITMAPINFOHEADER bi;
ZeroMemory( &wc, sizeof( WNDCLASS ) );
wc.style = CS_OWNDC;
wc.lpfnWndProc = layer_proc;
wc.hInstance = hInst;
wc.lpszClassName = g_app_class_name;
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
if ( !RegisterClass( &wc ) ) return 1;
g_hWnd = CreateWindowEx( WS_EX_LAYERED | WS_EX_TOPMOST,
g_app_class_name, "layer", WS_POPUP | WS_VISIBLE | WS_SYSMENU,
(GetSystemMetrics( SM_CXSCREEN ) >> 1) - (W >> 1),
(GetSystemMetrics( SM_CYSCREEN ) >> 1) - (H >> 1),
W, H, NULL, NULL, hInst, NULL );
bi.biSize = sizeof( BITMAPINFOHEADER );
bi.biWidth = W;
bi.biHeight = -H;
bi.biPlanes = 1;
bi.biBitCount = 32;
bi.biCompression = BI_RGB;
g_hDC = CreateCompatibleDC( NULL );
g_hDIB = CreateDIBSection( g_hDC, (BITMAPINFO *)&bi, DIB_RGB_COLORS, (void **)&p_layer, NULL, 0 );
SelectObject( g_hDC, g_hDIB );
for ( i = 0; i < W * H; i++ ) {
p_layer[i] = 0x7f7f7f7f;
}
// TODO: premultiply each pixel here
layer_update();
while ( GetMessage( &msg, NULL, 0, 0 ) ) {
TranslateMessage( &msg );
DispatchMessage( &msg );
}
return 0;
}
Вложения
Я делал похоже, но на Делфи.
Поскоку прозрачность делается через WinApi, то должно работать без глюков на windows 2000 и выше.
Поскоку прозрачность делается через WinApi, то должно работать без глюков на windows 2000 и выше.
Иконка, иконка.... Я микрографику рисовать не умею)), а может мне просто лень.. кстати я об этом думал)) а раз я думал и не сделал значит мне точно лень)))
вот это не совсем понял...а то выставлять в режиме НЮ ...
НЮ - это значит голый, не одетый!
Часики, это Ваше чадо, так представте пжл миру, во всей красоте !!!
А то лень !!!...???
Часики, это Ваше чадо, так представте пжл миру, во всей красоте !!!
А то лень !!!...???
Ещё по теме
4
Поделиться: