为什么单击编辑框关闭Win32窗口(C ++)?

卡列布

下面的代码应该创建一个带有菜单,静态文本和编辑框的简单窗口,但是当我尝试创建一个编辑框时,它要么根本不运行(没有错误),要么当它运行时我尝试单击在编辑框上,窗口关闭。我真的很困,任何帮助将不胜感激!旁注:我是使用c ++的winapi / gui的初学者,所以请保持尊重。

#include <Windows.h>
#include <iostream>

#define FILE_MENU_NEW 1
#define FILE_MENU_OPEN 2
#define FILE_MENU_EXIT 3

struct WindowPosition
{
    int x, y = 0;
} winPos;

struct WindowSize
{
    int width = 600;
    int height = 500;
} winSize;

HMENU hMenu;

// Window proc function
LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
void addMenus(HWND);
void AddControls(HWND);

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR args, int ncmdshow)
{
    WNDCLASSW wc = { 0 };

    wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hInstance = hInst;
    wc.lpszClassName = L"myWindowClass";
    wc.lpfnWndProc = WindowProcedure;

    if (!RegisterClassW(&wc))
    {
        return -1;
    }

    CreateWindowW(L"myWindowClass", L"My Window", WS_OVERLAPPEDWINDOW | WS_VISIBLE, winPos.x, winPos.y, winSize.width, winSize.height,
        NULL, NULL, NULL, NULL);

    // Window loop
    MSG msg = { 0 };
    while (GetMessage(&msg, NULL, NULL, NULL))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;
}

LRESULT CALLBACK WindowProcedure(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
    switch (msg)
    {
    case WM_COMMAND:
        if (wp == 1)
        {
            MessageBeep(MB_OK);
        }
        else if (FILE_MENU_EXIT)
        {
            DestroyWindow(hWnd);
        }
        break;
    case WM_CREATE:
        addMenus(hWnd);
        AddControls(hWnd);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProcW(hWnd, msg, wp, lp);
    }
}

void addMenus(HWND hWnd)
{
    hMenu = CreateMenu();
    HMENU hFileMenu = CreateMenu();

    AppendMenu(hFileMenu, MF_STRING, FILE_MENU_NEW, L"New");
    AppendMenu(hFileMenu, MF_STRING, FILE_MENU_OPEN, L"Open");
    AppendMenu(hFileMenu, MF_SEPARATOR, NULL, NULL);
    AppendMenu(hFileMenu, MF_STRING, FILE_MENU_EXIT, L"Exit");

    AppendMenu(hMenu, MF_POPUP, (UINT_PTR)hFileMenu, L"File");
    AppendMenu(hMenu, MF_STRING, 2, L"Help");

    SetMenu(hWnd, hMenu);
}

void AddControls(HWND hWnd)
{
    CreateWindowW(L"static", L"Username: ", WS_VISIBLE | WS_CHILD, 200, 100, 100, 50, hWnd, NULL, NULL, NULL);
    // This is where the problem is... (When I remove the second parameter and put L"Enter Username") the program does not run at all.
    CreateWindowW(L"edit", NULL, WS_VISIBLE | WS_CHILD, 0, 0, 100, 50, hWnd, NULL, NULL, NULL);
}
Song Zhu - MSFT

使用时else if (FILE_MENU_EXIT),此结果始终为true。你可以试试:

case WM_COMMAND:
    if (wp == 1)
    {
        MessageBeep(MB_OK);
    }
    else if (wp == FILE_MENU_EXIT)
    {
        DestroyWindow(hWnd);
    }
    break;

您也可以使用:

case WM_COMMAND:
    switch (wp)
    {
    case FILE_MENU_NEW:
        MessageBeep(MB_OK);
        break;
    case FILE_MENU_EXIT:
        DestroyWindow(hWnd);
        break;
    }
    break;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C Win32 Api:完成编辑后,更新编辑框

来自分类Dev

如何在编辑框中显示/添加文件路径(或任何文本)?(C ++ Win32 API)

来自分类Dev

C Win32:窗口自动关闭

来自分类Dev

Win32窗口立即关闭

来自分类Dev

多行编辑框:为什么我错过角色?

来自分类Dev

为什么不能在Win32中启用unicode编辑控件?

来自分类Dev

编辑Win32组合框项目

来自分类Dev

当窗口失去对Win32的关注时,为什么覆盖的非客户区域显示默认值?

来自分类Dev

c ++ Win32多个窗口执行相同的操作

来自分类Dev

为什么不能创建新的Win32控制台Visual C ++?

来自分类Dev

为什么Win32没有僵尸线程问题?

来自分类Dev

为什么我的win32程序需要提升?

来自分类Dev

为什么Win32没有僵尸线程问题?

来自分类Dev

为什么在 WIN32 项目中需要 MyRegisterClass() 函数?

来自分类Dev

WIN32 API中WM_MOUSEHOVER上的POPUP窗口-如何关闭它?

来自分类Dev

WIN32 API中WM_MOUSEHOVER上的POPUP窗口-如何关闭它?

来自分类Dev

Win32应用程序中的窗口无法正常关闭

来自分类Dev

Win32窗口创建失败?

来自分类Dev

HWNDHost内的Host Win32窗口

来自分类Dev

Win32窗口未显示

来自分类Dev

加号横穿编辑框等

来自分类Dev

如何设置编辑框

来自分类Dev

Qt tablewidget 编辑框

来自分类Dev

Win32 API:打开对话框窗口后,应用程序冻结

来自分类Dev

在win32 C ++编程中,要关闭窗口,我应该自己调用DestroyWindow(hWnd)还是SendMessage(WM_CLOSE,hWnd,0,0)?

来自分类Dev

C ++,Win32错误

来自分类Dev

有什么办法使用win32 api通过其标题获取窗口句柄?

来自分类Dev

如何在MFC SDI主窗口中添加编辑框和按钮?

来自分类Dev

使用C ++ Win32 GUI在窗口中显示文本

Related 相关文章

热门标签

归档