Windows.h 输入

Windows.h input

在过去的 2 周里,我一直在尝试使用 windows.h 库(为了简单使用 GUI)来制作一个程序。我设法制作了一个您可以在其中写入的文本框,但我的问题是您只能将数据引入为 char* 。该程序是为了让我的员工能够更轻松、更快地计算一些公式。我怎样才能将 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() 从 char* 中获取 int,

和 _wtoi() 从 wchar_t*.

获取整数

所以通常使用 _ttoi(),它将替换 atoi 或 _wtoi。

int a = _ttoi("123");

你需要添加 stdlib.h