?? changefont.cpp
字號:
//清華116頁習題5-5:設計一個窗口,在窗口中有五行文字,字體分別為楷體、宋體、仿宋體、黑體和自定義字體,
//字號由8到40線形增長,每一行的文字相繼出現后又消失,而且每一行文字的顏色由RGB(0,0,0)到RGB(255,255,255)線形增長
#include <windows.h>
#include <stdlib.h>
#include <string.h>
long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam); //消息處理函數聲明.
BOOL InitWindowsClass(HINSTANCE hInstance); //初始化窗口類聲明
BOOL InitWindows(HINSTANCE hInstance, int nCmdShow);//初始化窗口聲明.
HWND hWndMain; //定義窗口句柄.
int iFontSign=0; //定義全局變量iFontSign記錄正在輸出的當前行的號碼,即字體標志,表示采用哪種字體.
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow) //主函數
{
MSG Message;
if(!InitWindowsClass(hInstance)) //初始化窗口類.
return FALSE;
if(!InitWindows(hInstance,nCmdShow)) //初始化窗口.
return FALSE;
while(GetMessage(&Message,0,0,0))
{
TranslateMessage(&Message); //消息循環.
DispatchMessage(&Message);
}
return Message.wParam;
}
long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam) //消息處理函數.
{
HDC hDC; //定義設備環境句柄.
HFONT hF; //定義字體句柄.
PAINTSTRUCT ps; //定義包含繪圖信息的結構體變量
TEXTMETRIC tm; //定義包含字體信息的結構體變量.
static char lpsz_1[]="好好學習天天向上 "; //通過數組定義輸出的字符串.
char chFont[20]; //定義字體種類的字符串.
int X=0,Y=0,i;
static int nCharlen=strlen(lpsz_1); //定義字符串長度變量. strlen含義?
switch(iMessage)
{
case WM_PAINT: //處理繪圖消息.
hDC=BeginPaint(hWnd,&ps); //獲得設備環境指針.
for(i=0;i<nCharlen;i+=2) //采用某種字體和顏色輸出字符串.
{
SetTextColor(hDC,RGB((long)(255.0/nCharlen*i),0,0));//設置字體顏色.
if(iFontSign%5==0)
strcpy(chFont,"楷體_GB2312");//設置包含字體信息的字符串.iFontSign%5確定當前輸出文字的行號
else if(iFontSign%5==1)
strcpy(chFont,"宋體"); //iFont%表示以5為周期循環改變字體.
else if(iFontSign%5==2)
strcpy(chFont,"隸書");
else if(iFontSign%5==3)
strcpy(chFont,"黑體");
else strcpy(chFont,"幼圓");
hF=CreateFont( //定義字體句柄.
(long)(8+32.0*i/nCharlen), //字體高度.
0, //由系統根據高寬比選取字體最佳寬度值.
0, //文本傾斜度為0,表示水平.
0, //字體傾斜度為0.
400, //字體粗度.400為正常.
0, //非斜體字,
0, //無下劃線.
0, //無刪除線.
GB2312_CHARSET, //表示所用的字符集為GB2312_CHARSET
OUT_DEFAULT_PRECIS, //刪除精度為缺省值.
CLIP_DEFAULT_PRECIS, //裁剪精度為缺省值.
DEFAULT_QUALITY, //輸出質量為缺省值.
DEFAULT_PITCH|FF_DONTCARE, //字間距和字體系列使用缺省值.
chFont); //字體名稱.
SelectObject(hDC,hF); //選入字體.
GetTextMetrics(hDC,&tm); //得到包含字體信息的結構體.
X=X+tm.tmAveCharWidth*2; //設置輸出字符的X坐標.
Y=iFontSign%5*40+tm.tmExternalLeading; //設置輸出字符的Y坐標.
TextOut(hDC,X,Y,&lpsz_1[i],2); //輸出第i個字符.產生滾動的效果.
Sleep(400); //暫停0.4秒,然后再接著循環,實現了一行字體的動態顯示
DeleteObject(hF); //刪除字體句柄.
}
iFontSign++; //字體標志增加,標志一行的結束
InvalidateRect(hWnd,NULL,1);
//刷新用戶區.進入下一行的輸出,InvalidateRect最后參數為1表示窗口內容被完全擦除,如果為0,表示保留窗口內容
EndPaint(hWnd,&ps); //刪除設備用戶指針.
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
}
BOOL InitWindows(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hWnd=CreateWindow("5_5", //窗口類名稱.
"字體顯示實例程序", //標題欄名稱.
WS_OVERLAPPEDWINDOW, //窗口樣式.有標題欄和最大最小化按鈕.
CW_USEDEFAULT, //窗口左上角坐標.
0,
CW_USEDEFAULT, //采用缺省的高度和寬度.
0,
NULL, //無父窗口.
NULL, //無菜單.
hInstance, //當前應用實例句柄.
NULL); //指向傳遞給窗口的參數的指針.不用.
if(!hWnd) //創建失敗.
return FALSE;
hWndMain=hWnd; //給全局窗口句柄付值.
ShowWindow(hWnd,nCmdShow); //顯示窗口.
UpdateWindow(hWnd); //刷新用戶區.
return TRUE;
}
BOOL InitWindowsClass(HINSTANCE hInstance)
{
WNDCLASS WndClass;
WndClass.cbClsExtra=0; //無窗口類擴展.
WndClass.cbWndExtra=0; //無窗口實例擴展.
WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));//背景為白色.
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW); //光標為為箭頭.
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION); //采用缺省圖標.
WndClass.hInstance=hInstance; //當前實例.
WndClass.lpfnWndProc=WndProc; //消息處理函數.
WndClass.lpszClassName="5_5"; //窗口類名稱.
WndClass.lpszMenuName=NULL; //無菜單.
WndClass.style=0; //缺省窗口風格.
return RegisterClass(&WndClass); //返回窗口注冊值.
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -