windows32基础和GetSystemMetrics函数
2012-07-30 16:47 java线程例子 阅读(211) 评论(0) 编辑 收藏 举报有个坏消息,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; }
结果如下: