一个GUI程序如何创建一个控制台程序(CUI)

参考资料:http://www.cnblogs.com/linucos/archive/2012/09/10/2678972.html

 下面这段代码演示GUI程序如何与它的控制台进行交互,包括向控制台输出字符和从控制台获取输入的字符。

 

void CreateConsole()
{
	wchar_t szOutputTest[MAX_PATH] = L"晚春 韩愈\n草木知春不久归,\n百般红紫都芳菲。\n杨柳榆荚无才思,\n惟解漫天作雪飞。\n";
	DWORD dwStringLength = wcslen(szOutputTest);

	DWORD dwBytesWritten = 0;
	DWORD dwErrorCode = 0;
	//STARTUPINFO si = {0};
	//PROCESS_INFORMATION pi = {0};
	//CreateProcess(L"c:\\windows\\system32\\cmd.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
	
	if(!AllocConsole())
	{
		MessageBox(NULL, L"创建控制台失败!", L"", MB_OK);
	}


	
	HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTitle(L"Balloon Console Test"); 
	

	if(hStdout == INVALID_HANDLE_VALUE)
	{
		MessageBox(NULL, L"获取标准输出控制台句柄出错!", L"", MB_OK);
		return;
	}

	if(!WriteConsole(hStdout, szOutputTest, dwStringLength, &dwBytesWritten, NULL))
	{
		dwErrorCode = GetLastError();
		MessageBox(NULL, L"向控制台写入数据失败!", L"", MB_OK);
	}

}


void InputTextOnConsole(HWND hWnd)
{
	HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
	if(hStdin == INVALID_HANDLE_VALUE)
	{
		MessageBox(NULL, L"获取标准输入控制台句柄出错!", L"", MB_OK);
		return;
	}
	//开缓存
	wchar_t szBuffer[100] = {0}; 
	//已输入数
	DWORD dwCount = 0;
	ReadConsole(hStdin, szBuffer, 100, &dwCount, NULL);
	MessageBox(hWnd, szBuffer, L"", MB_OK);

}

 

程序运行截图:

一个GUI程序如何创建一个控制台程序(CUI)_第1张图片

 

注意:File菜单下面有个叫“Input text on console”的菜单项,点击这个菜单项之后,程序开始等待用户在控制台中输入,实际上是点击这个菜单项之后调用nputTextOnConsole()函数,本质上是ReadConsole()函数挂起主程序,等待用户输入。

你可能感兴趣的:(C/C++/Assembly)