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

[C++\WinAPi] "Окно" в dll

Эксперт
Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
994
Реакции
1,209
Код:
Expand Collapse Copy
#include <windows.h>
#include <string>
#include <stdexcept>


#define ID_CLIMBEXTRA 132
#define ID_SILHOUETTE 133

std::string szClassName = "MyWindow";
HWND        hWnd;

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
BOOL             RegClass(WNDPROC, LPCTSTR, UINT);


struct myFunction
{
    int iClimbExtra;
    int iSilhouettes;
    myFunction()
    {
        iClimbExtra = 0;
        iSilhouettes = 0;
    }
}Fun;



int CreateForm()
{
    MSG msg;
    if (!RegClass(WndProc, szClassName.c_str(), COLOR_WINDOW))
        MessageBox(0, "RegisterClassEx", "Error", MB_OK);/*return 0;*/


    hWnd = CreateWindow(szClassName.c_str(), szClassName.c_str(),
        WS_OVERLAPPED | WS_MINIMIZEBOX | WS_CAPTION | WS_SYSMENU,
        10, 10, 10, 10, NULL, NULL, GetModuleHandle(NULL), NULL);

    if (!hWnd)
        MessageBox(0, "CreateWindow", "Error", MB_OK);/*return 0;*/

//создаем контролы

    ShowWindow(hWnd, SW_SHOWNORMAL/*SW_HIDE*/);
    UpdateWindow(hWnd);

 
    while (GetMessage(&msg, 0, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    UnregisterClass(szClassName.c_str(), GetModuleHandle(NULL));
    return msg.wParam;
}

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

        case WM_NULL:
        {
            switch (wParam)
            {
            case ID_CLIMBEXTRA:
                Fun.iClimbExtra = lParam;
                break;
            case ID_SILHOUETTE:
                Fun.iSilhouettes = lParam;
                break;
 
                break;
            }
            break;
        }
        
    }
    return DefWindowProc(hwnd, msg, wParam, lParam);
}
 BOOL RegClass(WNDPROC Proc, LPCTSTR szName, UINT brBackground)
{
    WNDCLASSEX wc =
    {
        sizeof(WNDCLASSEX),
        0,
        Proc,
        0,
        0,
        GetModuleHandle(NULL),
        NULL,
        NULL,
        (HBRUSH)brBackground,
        0,
        szClassName.c_str(),
        NULL
    };
    return (RegisterClassEx(&wc) != 0);
}

BOOL APIPRIVATE DllMain(HINSTANCE hModule, DWORD dwReason, LPVOID lpReserv)
{
    UNREFERENCED_PARAMETER(lpReserv);
    switch (dwReason)
    {
    case DLL_PROCESS_ATTACH:         
        DisableThreadLibraryCalls(hModule);
        CloseHandle(CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)CreateForm, NULL, NULL, NULL));
        return TRUE;

    case DLL_PROCESS_DETACH:
        exit(0);
        return TRUE;
    }
    return FALSE;
}
 
Назад
Сверху Снизу