[glfwInit()从其内部干扰窗口(WINAPI)的外观

问题描述 投票:0回答:1

当我在WINAPI代码中调用glfwInit()时,应用程序的窗口受到干扰。

我在下面的简单WINAPI代码中重现了该问题。在“帮助”菜单中选择“关于”时,窗口尺寸和某些字体看起来较小,并且下拉菜单名称失真。我附加了带有和不带有glfwInit()的图像,如下所示:

有没有一种方法可以使GLFW初始化不影响其他窗口?

Image WITHOUT glfwInit() use:

Image WITH glfwInit() use:

代码文件在下面:

Test.cpp:

#include <windows.h>
#include <iostream>
#include <wchar.h>

#include "resource.h"

// Include GLFW
#include <GLFW/glfw3.h>
GLFWwindow* window;

// GLOBAL Variales
const char g_szClassName[] = "myWindowClass";

// Forward declarations
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK AboutDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASSEX wc;
    HWND hwnd;
    MSG Msg;

    wc.cbSize = sizeof(WNDCLASSEX);
    wc.style = 0;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon(GetModuleHandle(NULL), NULL);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wc.lpszMenuName = MAKEINTRESOURCE(IDR_MYMENU);
    wc.lpszClassName = g_szClassName;
    wc.hIconSm = (HICON)LoadImage(GetModuleHandle(NULL), NULL, NULL, 16, 16, 0);

    if (!RegisterClassEx(&wc))
    {
        MessageBox(NULL, "Window Registration Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, g_szClassName, "The title of my window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
        640, 480, NULL, NULL, hInstance, NULL);

    if (hwnd == NULL)
    {
        MessageBox(NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    while (GetMessage(&Msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
    return Msg.wParam;
}


LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    static HWND hwndEdit;
    HWND hwndButton;

    switch (msg)
    {
    case WM_CREATE:
        break;

    case WM_CLOSE:
        DestroyWindow(hwnd);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    case WM_COMMAND:

        switch (LOWORD(wParam))
        {
        case ID_HELP_ABOUT:
        {
            int ret = DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_ABOUTDLG), hwnd, AboutDlgProc);
            if (ret == -1)
                MessageBox(hwnd, "Dialog failed!", "Error", MB_OK | MB_ICONINFORMATION);
        }
        break;
        case ID_FILE_EXIT:
            PostMessage(hwnd, WM_CLOSE, 0, 0);
            break;
        }
    default:
        return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}


static INT_PTR CALLBACK AboutDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
    switch (Message)
    {
    case WM_INITDIALOG:
    {
        glfwInit(); // ********** GLFW INITIALIZATION **********
        //window = glfwCreateWindow(640, 480, "GLFW created window", NULL, NULL);
    }
        return TRUE;
    case WM_COMMAND:
        switch (LOWORD(wParam))
        {
        case IDOK:
        {
            EndDialog(hwnd, IDOK);
            glfwTerminate(); 
        }
            break;
        case IDCANCEL:
            EndDialog(hwnd, IDCANCEL);
            break;
        }
        break;
    default:
        return FALSE;
    }
    return TRUE;
}

Test.rc:

#include "resource.h"
#include "winres.h"


IDR_MYMENU MENU
BEGIN
    POPUP "&File"
    BEGIN
        MENUITEM "E&xit", ID_FILE_EXIT
    END

    POPUP "&Help"
    BEGIN
        MENUITEM "&About", ID_HELP_ABOUT
    END


END



IDD_ABOUTDLG DIALOG DISCARDABLE  0, 0, 239, 66
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "My About Box"
FONT 8, "MS Sans Serif"
BEGIN
    DEFPUSHBUTTON   "&OK",IDOK,174,18,50,14
    PUSHBUTTON      "&Cancel",IDCANCEL,174,35,50,14
    GROUPBOX        "About this program...",IDC_STATIC,7,7,225,52
    CTEXT           "GLFW is initialized.",IDC_STATIC,16,18,144,33

END

resource.h:

#define IDR_MYMENU 101

#define ID_FILE_EXIT 9001
#define ID_HELP_ABOUT 9003

#define IDD_ABOUTDLG 9004

#define IDM_EXIT 105
c++ winapi glfw
1个回答
0
投票

请帮助...指定大小为n * n个实型元素的方阵。编写一个程序,为变量T分配一个等于向量X和Y的标量积的值,其中向量X的分量定义为行的最大元素,向量Y的分量定义为列的最小元素的矩阵A

© www.soinside.com 2019 - 2024. All rights reserved.