windows32基础和GetSystemMetrics函数

2014-11-24 08:59:19 · 作者: · 浏览: 0

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

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

下面观察printf和sprintf的定义

[cpp]
int printf(const char* szFormat,...);

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

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

int sprintf(char * szBuffer,const char* szFormat,...);在console下,你可以这样输出:

[cpp]
#include
#include
using namespace std;
int main(){
printf("the sum of %i and %i is %i\n",5,3,5+3);

system("pause");
return 0;
}

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

system("pause");
return 0;
}
下面用sprintf,跟上面是等价的:

[cpp]
#include
#include
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;
}

#include
#include
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最大的不同是,一个是占用两个字节,一个是占用一个字节:

[cpp]
#include
#include
using namespace std;
int main(){
wchar_t p[]=L"hello";
cout< cout< system("pause");
return 0;
}

#include
#include
using namespace std;
int main(){
wchar_t p[]=L"hello";
cout< cout< system("pause");
return 0;
}
下面是用MessageBoxPrintf输出的例子:(GetSystemMetric很重要)

[cpp]
#include
#include
#include
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;
}

#include
#include
#include
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;
}
结果如下:

\
作者:zh634455283