Подведи собственные итоги года совместно с YOUGAME и забери ценные призы! Перейти

Логотип в длл перед запуском

Эксперт
Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
994
Реакции
1,209
пример реализации простого логотипа в длл.
Суть: при запуске длл(аттаче) показывается ваша картинка, которая через определенное время плавно "затухает".
Код простой. в комментариях не нуждается. Основные регулируемые единицы подписаны:
первым делом создаем нужный логотип в формате .BMP(другие не пробовал). И импортируем в ресурсы своей длл. подключаем к проекту и пишем:
Код:
Expand Collapse Copy
#include <Windows.h>
#include <process.h>
#include "resource.h"

HINSTANCE hInstance = nullptr; 
HWND      hWndLogo; 
HBITMAP   hBmp;
HBRUSH    hBrush;
bool      bTheEnd = false;


LRESULT APIPRIVATE WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    default:
        return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}


unsigned APIENTRY StartWindow(LPVOID  lpParam)
{
    WNDCLASSA wclass;
    ZeroMemory(&wclass, sizeof(WNDCLASSA));
    hBmp = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1));
    
    hBrush = CreatePatternBrush(hBmp);

    wclass.style = CS_OWNDC | CS_VREDRAW | CS_GLOBALCLASS | CS_HREDRAW  | CS_DBLCLKS;
    wclass.lpfnWndProc = (WNDPROC)WndProc;
    wclass.hInstance = hInstance;
    wclass.hbrBackground = hBrush;
    wclass.lpszClassName = "_none__";
    wclass.lpszMenuName = NULL;
    wclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wclass.hIcon = NULL;
 

    if (!RegisterClassA(&wclass))
        return FALSE;

    static int width = 300;
    static int height = 150;
    hWndLogo = CreateWindowExA(WS_EX_TOPMOST, "_none__", "MyApp",
        WS_POPUP,
        (GetSystemMetrics(SM_CXSCREEN) >> 1) - (width >> 1),
        (GetSystemMetrics(SM_CYSCREEN) >> 1) - (height >> 1),
        width,
        height,
        NULL,
        NULL,
        hInstance,
        NULL);


    ShowWindow(hWndLogo, SW_SHOW);

    MSG msg;
    ZeroMemory(&msg, sizeof(msg));
    while (GetMessage(&msg, hWndLogo, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
        if (bTheEnd == true)
            break;
    }

    return 0L;
}


unsigned APIENTRY StartFrame(LPVOID  lpParam)
{
    Sleep(5000);//время отображения
    SetWindowLong(hWndLogo, GWL_EXSTYLE, GetWindowLong(hWndLogo, GWL_EXSTYLE) | WS_EX_LAYERED);
    for (size_t i = 255; i > 0; i--)
    {
        SetLayeredWindowAttributes(hWndLogo, 0, i, LWA_ALPHA);
        Sleep(10); //скорость затухания
    }
    bTheEnd = true;
    return 0;
}






BOOL WINAPI DllMain(
    HINSTANCE hinstDLL, 
    DWORD fdwReason,   
    LPVOID lpReserved)
{
    switch (fdwReason)
    {
    case DLL_PROCESS_ATTACH:
        hInstance = hinstDLL;
        _beginthreadex(NULL, NULL, StartWindow, NULL, NULL, NULL);
        _beginthreadex(NULL, NULL, StartFrame, NULL, NULL, NULL);
        break;

    case DLL_THREAD_ATTACH:
        break;

    case DLL_THREAD_DETACH:
        break;

    case DLL_PROCESS_DETACH:
        
        break;
    }
    return TRUE;
}

IDB_BITMAP1 - идентификатор ресурса. создается автоматически при импорте ресурса. размещается в файле resource.h

ppA8KDzR1C.gif
 
ууууу, а ведь я это сделал первый !!!11!!
 
Последнее редактирование:
Назад
Сверху Снизу