Как отображать переменные в windows окне сообщения API C программирование - PullRequest
0 голосов
/ 20 июня 2020

Я пытаюсь распечатать переменную в окне сообщения с языка C Это мой текущий код

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <Windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreveInstance, LPSTR lpCmdLine, int nCmdShow)
{
    srand((unsigned int)time(NULL));
    int dice = (rand() % 20) + 1;
    char temp[128];
    sprintf(temp, "The die shows: %d", dice);

    MessageBox(NULL, temp, L"Dice", MB_YESNO);

    return 0;
}

моя попытка заключалась в назначении строки, которая включала переменную, а затем я помещал это назначенная строка в MessageBox, но всякий раз, когда я ее компилирую, я получаю предупреждение:

error C2220: warning treated as error - no 'object' file generated
warning C4133: 'function': incompatible types - from 'char [128]' to 'LPCWSTR'
warning C4100: 'nCmdShow': unreferenced formal parameter
warning C4100: 'lpCmdLine': unreferenced formal parameter
warning C4100: 'hPreveInstance': unreferenced formal parameter
warning C4100: 'hInstance': unreferenced formal parameter

, есть ли какое-то решение для этого? В настоящее время я использую Visual Studio 2017

1 Ответ

2 голосов
/ 20 июня 2020

MessageBox на самом деле является макросом - существует две версии: MessageBoxA, который принимает символы, и MessageBoxW, который принимает широкие символы. В зависимости от набора символов по умолчанию это будет версия A или W. По умолчанию это версия W.

Если вы go в свойствах проекта, в разделе «Общие», в нижней части диалогового окна, есть запись для набора символов. По умолчанию установлен Unicode (версия W). Просто измените его на MBCS (многобайтовый набор символов), и ваша программа должна построить после того, как вы удалили L из заголовка MessageBox

В качестве альтернативы оставьте его как Unicode и измените код на следующий. Обратите внимание, что вам не понадобится winmain, если он не использует GUI. Вы можете использовать MessageBox в консольном приложении.

int main()
{
    srand((unsigned int)time(NULL));
    int dice = (rand() % 20) + 1;
    wchar temp[128];
    wsprintf(temp, L"The die shows: %d", dice);

    MessageBox(NULL, temp, L"Dice", MB_YESNO);

    return 0;
}

Существует третье решение, использующее TCHAR, но мне придется поискать его перед публикацией.

Отредактируйте третье решение Если вы посмотрите в stdafx.h, вероятно, там уже есть tchar.h. Это характерные агности c определений. Вы можете использовать MessageBox с консольным приложением C ++ Win32.

#include "stdafx.h"
#include <stdlib.h>
#include <time.h>
#include <Windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
    srand((unsigned int)time(NULL));
    int dice = (rand() % 20) + 1;
    TCHAR temp[128];
    _stprintf(temp, _T("The die shows: %d"), dice);

    MessageBox(NULL, temp, _T("Dice"), MB_YESNO);

    return 0;
}
...