windows32基础和GetSystemMetrics函数

有个坏消息,windows程序中不能使用printf函数

好消息是,仍然可以使用sptrinf和系列的其他函数来显示文本

下面观察printf和sprintf的定义

int printf(const char* szFormat,...);

int sprintf(char * szBuffer,const char* szFormat,...);

在console下,你可以这样输出:

#include<iostream>
#include<string>
using namespace std;
int main(){
	printf("the sum of %i and %i is %i\n",5,3,5+3);

   	system("pause");
	return 0;
}


下面用sprintf,跟上面是等价的:

#include<iostream>
#include<string>
using namespace std;
int main(){
	char buffer[100];
	sprintf(buffer,"the sum of %i and %i is %i",5,3,5+3);
	puts(buffer);
	system("pause");
	return 0;
}


unicode:

如果UNICODE没有定义,那么:

typedef char TCHAR

如果UNICODE定义了,那么:

typedef wchar_t TCHAR

wchar_t跟char最大的不同是,一个是占用两个字节,一个是占用一个字节:

#include<iostream>
#include<string>
using namespace std;
int main(){
	wchar_t p[]=L"hello";
	cout<<wcslen(p)<<endl;
	cout<<sizeof(p)<<endl;//输出12
	system("pause");
	return 0;
}


下面是用MessageBoxPrintf输出的例子:(GetSystemMetric很重要)

#include<windows.h>
#include<tchar.h>
#include<stdio.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 hPrevInstance,PSTR scCmdLine,int iCmdShow){
	int cxScreen,cyScreen;
	cxScreen=GetSystemMetrics(SM_CXSCREEN);
	cyScreen=GetSystemMetrics(SM_CYSCREEN);
	MessageBoxPrintf(TEXT("ScrnSize"),TEXT("The screen is %i pixels wide by %i pixels high"),cxScreen,cyScreen);
	return 0;
}


结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值