视窗输入

Windows.h input

本文关键字:输入      更新时间:2023-10-16

在过去的两周里,我一直在尝试使用windows.h库制作一个程序(用于GUI的简单使用)。我设法制作了一个可以写入的文本框,但我的问题是您只能将数据作为char*引入。该程序是为了让我的工人能够更容易和更快地计算一些公式。如何将字符转换为 int ,而不会遇到 ASCII 代码问题?

*我也尝试过使用字符串。这是我的实际代码:

#if defined(UNICODE) && !defined(_UNICODE)
#define _UNICODE
#elif defined(_UNICODE) && !defined(UNICODE)
#define UNICODE
#endif
#include <tchar.h>
#include <windows.h>
#include <string>
using namespace std;
/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
HWND textstatic,texteditz1,texteditz2,textedit2,buttoncalculate,button2;
/*  Make the class name into a global variable  */
string inputZ1,inputZ2;
char *cinputZ1 = &inputZ1[0u];
TCHAR szClassName[ ] = _T("CodeBlocksWindowsApp");
int WINAPI WinMain (HINSTANCE hThisInstance,
                 HINSTANCE hPrevInstance,
                 LPSTR lpszArgument,
                 int nCmdShow)
{
HWND hwnd;               /* This is the handle for our window */
MSG messages;            /* Here messages to the application are saved */
WNDCLASSEX wincl;        /* Data structure for the windowclass */
/* The Window structure */
wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
wincl.cbSize = sizeof (WNDCLASSEX);
/* Use default icon and mouse-pointer */
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL;                 /* No menu */
wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
wincl.cbWndExtra = 0;                      /* structure or the window instance */
/* Use Windows's default colour as the background of the window */
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
/* Register the window class, and if it fails quit the program */
if (!RegisterClassEx (&wincl))
    return 0;
/* The class is registered, let's create the program*/
hwnd = CreateWindowEx (
       0,                   /* Extended possibilites for variation */
       szClassName,         /* Classname */
       _T("Code::Blocks Template Windows App"),       /* Title Text */
       WS_OVERLAPPEDWINDOW, /* default window */
       CW_USEDEFAULT,       /* Windows decides the position */
       CW_USEDEFAULT,       /* where the window ends up on the screen */
       500,                 /* The programs width */
       500,                 /* and height in pixels */
       HWND_DESKTOP,        /* The window is a child-window to desktop */
       NULL,                /* No menu */
       hThisInstance,       /* Program Instance handler */
       NULL                 /* No Window Creation data */
       );
/* Make the window visible on the screen */
ShowWindow (hwnd, nCmdShow);
/* Run the message loop. It will run until GetMessage() returns 0 */
while (GetMessage (&messages, NULL, 0, 0))
{
    /* Translate virtual-key messages into character messages */
    TranslateMessage(&messages);
    /* Send message to WindowProcedure */
    DispatchMessage(&messages);
}
/* The program return-value is 0 - The value that PostQuitMessage() gave */
return messages.wParam;
}

/*  This function is called by the Windows function DispatchMessage()  */
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)                  /* handle the messages */
{
    case WM_CREATE:
    texteditz1 = CreateWindow ("EDIT","",
                               WS_VISIBLE | WS_CHILD,
                               60,50,45,14,
                               hwnd, (HMENU) 4,NULL,NULL);
    texteditz2 = CreateWindow ("EDIT","",
                               WS_VISIBLE | WS_CHILD,
                               60,30,45,14,
                               hwnd, (HMENU) 5 ,NULL , NULL);
    textstatic = CreateWindow ("STATIC",
                                "Z2=",
                                WS_VISIBLE | WS_CHILD,
                                30,50,30,15,
                                hwnd, NULL, NULL, NULL);
    textstatic = CreateWindow ("STATIC",
                                "Z1=",
                                WS_VISIBLE | WS_CHILD,
                                30,30,30,15,
                                hwnd, NULL, NULL, NULL);
    textstatic = CreateWindow ("STATIC",
                                "x1min=",
                                WS_VISIBLE | WS_CHILD,
                                30,70,50,15,
                                hwnd, NULL, NULL, NULL);

    buttoncalculate = CreateWindow ("BUTTON",
                                    "Calculate",
                                    WS_VISIBLE | WS_CHILD,
                                    150, 300, 70, 15,
                                    hwnd, (HMENU) 1, NULL, NULL);
    button2 = CreateWindow ("BUTTON","apasa",
                            WS_VISIBLE | WS_CHILD,
                            300, 300, 70, 15,
                            hwnd, (HMENU) 2, NULL, NULL);
    break;
    case WM_COMMAND:
        switch (LOWORD(wParam))
        {
            case 1:
                {
                int text=0 ,text2=0 ;
                text=GetWindowText(texteditz1,inputZ1,5);
                text2=GetWindowText(texteditz2,inputZ2,5);
                ::MessageBox(hwnd, inputZ1, "Button",MB_OK);
                ::MessageBox(hwnd, inputZ2, "Text2",MB_OK);
                }
                break;
            case 2:
                ::MessageBox (hwnd, "251", "button",NULL);
            break;
        }
    break;
    case WM_DESTROY:
        PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
        break;
    default:                      /* for messages that we don't deal with */
        return DefWindowProc (hwnd, message, wParam, lParam);
}

return 0;
}

你可以使用 atoi() get int from a char*,

和 _wtoi() 从 wchar_t* 获取 int。

所以使用 _ttoi(),它将取代 atoi 或 _wtoi。

int a = _ttoi("123");

你需要添加stdlib.h