1.unicode中处理宽字符集

几个函数说明一下:
int _vsntprintf(char* str, size_t size, const char* format, va_list ap);
char *str ,把生成的格式化的字符串存放在这里.
size_t size [in], str可接受的最大字符数 (非字节数,UNICODE一个字符两个字节),防止产生数组越界.
const char *format [in], 指定输出格式的字符串,它决定了你需要提供的可变参数的类型、个数和顺序。
va_list ap, va_list变量
函数功能:将可变参数格式化输出到一个字符数组。
用法类似于vsprintf,不过加了size的限制,防止了内存溢出(size为str所指的存储空间的大小)。
返回值:执行成功,返回最终生成字符串的长度,若生成字符串的长度大于size,则将字符串的前size个字符复制到str,同时将原串的长度返回(不包含终止符);执行失败,返回负值,并置errno.

#include <Windows.h>
#include <stdarg.h>
#include <stdio.h>
#include <tchar.h>

int CDECL MessageBoxPrintf(TCHAR* szCaption,TCHAR* szFormat,...)
{
	TCHAR szBuffer[1024];
	va_list pArgList;
	va_start(pArgList,szFormat);

	_vsntprintf(szBuffer,sizeof(szBuffer)/sizeof(TCHAR),szFormat,pArgList);

	va_end(pArgList);

	return MessageBox(NULL,szBuffer,szCaption,0);
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR szCmdLine,int iCmdShow)
{
	int cxScreen = GetSystemMetrics(SM_CXSCREEN);
	int cyScreen = GetSystemMetrics(SM_CYSCREEN);

	//MessageBox(NULL,TEXT("取得X和Y轴坐标"),TEXT("提示"),MB_OK);
	MessageBoxPrintf(TEXT("取得X和Y轴坐标"),TEXT("X坐标为%i像素,Y坐标为%i像素!,x = %i,y = %i"),cxScreen,cyScreen,1,2);
	return 0;
}

早上起来,想起我的魔兽的一个分辨率设置的问题,将我之前写的代码进行了优化
算是2.0版本,上代码

// BL_REG.cpp : Defines the entry point for the console application.
//

//#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>
#include <stdarg.h>
#include <tchar.h>

#define NOTICE          "魔兽争霸III游戏的显示器分辨率设置。\n"
#define SHOW            "请分别输入显示器的分辨率:例如:1024*768:"
#define ANSWER          "输入的分辨率为:"
#define INPUT_ERROR     "输入参数错误!程序退出!\n" 
#define SUCCESS         "设置成功!\n"
#define OPENREG_ERROR   "打开注册表失败!\n"
#define SETVALUE_ERROR  "设置参数失败!\n"

BOOL CreateKey(HKEY hMainKey,LPTSTR szSubKey)
{
	BOOL bRet = true;

	LONG lRet;
	HKEY hKey;

	lRet = RegCreateKeyEx(hMainKey,
		szSubKey,
		0,
		0,
		REG_OPTION_NON_VOLATILE,
		KEY_READ |KEY_WRITE,
		0,
		&hKey,
		NULL);
	if(lRet != ERROR_SUCCESS)
	{
		printf("%s 子键已存在!\n",szSubKey);
		bRet = false;
	}

	RegCloseKey(hKey);

	return bRet;
}

BOOL SetValue(DWORD dwWidth,DWORD dwHeigth)
{
	BOOL bRet = true;
	
	HKEY hKey;
	LONG lRet;
	

	lRet = RegOpenKeyEx(HKEY_CURRENT_USER,
		TEXT("Software\\Blizzard Entertainment\\Warcraft III\\Video"),
		0,
		KEY_WRITE,
		&hKey);
	
	if(lRet == ERROR_SUCCESS)
	{
		lRet = RegSetValueEx(hKey,
			TEXT("resheight"),
			0,
			REG_DWORD,
			(const BYTE*)&dwHeigth,
			sizeof(DWORD));
		lRet =lRet || RegSetValueEx(hKey,
			TEXT("reswidth"),
			0,
			REG_DWORD,
			(const BYTE*)&dwWidth,
			sizeof(DWORD));

		if(lRet == ERROR_SUCCESS)
		{
			printf("%s",SUCCESS);
		}
		else
		{
			printf("%s",SETVALUE_ERROR);
			bRet = false;
		}
	}
	else
	{
		printf("%s",OPENREG_ERROR);
		bRet = false;
	}

	RegCloseKey(hKey);

	return bRet;
}

int CDECL MessageBoxPrintf(TCHAR* szCaption,TCHAR* szFormat,...)
{
	int nlength = 0;
	TCHAR szBuffer[1024];
	va_list pArgList;
	va_start(pArgList,szFormat);

	_vsntprintf_s(szBuffer,sizeof(szBuffer)/sizeof(TCHAR),szFormat,pArgList);

	va_end(pArgList);
	

	return MessageBox(NULL,szBuffer,szCaption,MB_YESNO);;
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance,LPSTR szCmdLine,int nCmdShow)
{
	DWORD nHsize = GetSystemMetrics(SM_CXSCREEN);
	DWORD nVsize = GetSystemMetrics(SM_CYSCREEN);
	DWORD dwRet = 0;

	dwRet = MessageBoxPrintf(L"魔兽争霸分辨率设置",L"监测到系统的分辨率为:%ix%i,是否设置为魔兽争霸III的分辨率?\n",nHsize,nVsize);

	//printf("%s",NOTICE);
	//printf("%s",SHOW);
	//dwRet = scanf("%d*%d",&nHsize,&nVsize);
	//if(dwRet == 2)
	//{
	//	printf("%s%d*%d\n",ANSWER,nHsize,nVsize);
	//}
	//else
	//{
	//	printf("%s",INPUT_ERROR);
	//	return 1;
	//}
	
	if(dwRet == IDYES)
	{
		
		CreateKey(HKEY_CURRENT_USER,TEXT("Software\\Blizzard Entertainment\\Warcraft III\\Video"));
		SetValue(nHsize,nVsize);
		
	}
	return 0;
}


程序显示
完成结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值