windows編程函數(一)

1>DrawText函數簡單介紹git

    這個函數的做用很簡單,就是在指定的區域內輸出格式化的文本。web

    函數原型:windows

int DrawText(數組

  HDC hDC,安全

  LPCTSTR lpString,網絡

  int nCount,app

  LPRECT lpRect,函數

  UNIT uFormat字體

);this

    hDC是設備上下文句柄。lpString指向將要繪製的UNICODE文本。nCount是要輸出的字符數,若是nCount = -1,則Windows自動計算字符數,不過此時lpString所指向的必須是以NULL結尾的字符串。lpRect指向rect結構體,指定了文本格式化的矩形區域。uFormat是格式化標記,也是這裏面稍顯複雜的一個參數。

    下面是幾個經常使用的格式化標記:

    DT_CALCRECT:這個參數比較重要,可使DrawText函數計算出輸出文本的尺寸。若是輸出文本有多行,DrawText函數使用lpRect定義的矩形的寬度,並擴展矩形的底部以容納輸出文本的最後一行。若是輸出文本只有一行,則DrawText函數改變矩形的右邊界,以容納下正文行的最後一個字符。出現上述任何一種狀況,DrawText函數將返回格式化文本的高度,而不是繪製文本。

    DT_CENTER:指定文本水平居中顯示。

    DT_VCENTER:指定文本垂直居中顯示。該標記只在單行文本輸出時有效,因此它必須與DT_SINGLELINE結合使用。

    DT_SINGLELINE:單行顯示文本,回車和換行符都不斷行。

2>TextOut函數簡單介紹

該函數用當前選擇的 字體、背景顏色和正文顏色將一個字符串寫到指定位置。

BOOL TextOut(

HDC hdc, //   設備描述表句柄
int nXStart, // 字符串的開始位置 x座標
int nYStart, // 字符串的開始位置 y座標
LPCTSTR lpString, // 字符串
int cbString //   字符串中字符的個數
);
參數
hdc
[輸入] 設備環境的句柄
nXStart
[輸入] 指定用於字符串對齊的基準點的邏輯X座標。
nYStart
[輸入] 指定用於字符串對齊的基準點的邏輯Y座標。
lpString
[輸入] 指向將被繪製字符串的 指針。此字符串沒必要爲以\0結束的,由於cbString中指定了字符串的長度。
cbString
[輸入] 指定了字符串的長度。

返回值

若是 函數調用成功,返回值爲非零值。
若是 函數調用失敗,返回值爲0。
Windows NT:若想得到更多 錯誤信息,請調用GetLastError函數。
對基準點的解釋依賴於當前字符對齊模式,一個 應用程序能夠調用GetTextAlign來得到該模式,調用SetTextAlign來更改該模式。
缺省地,此函數不能使用和修改當前位置,但一個 應用程序能夠在每次在指定設備環境中調用TextOut以前,經過將參數fMode設爲TA_UPDATECP值來調用SetTextAlign,以容許系統在調用TextOut時修改當前位置,當上述標誌設置時,系統會忽略隨後調用TextOut中的nXStart和nYStart值。
當把函數TextOut放入一個路徑括號內時,系統爲包含每個字符並加上字符值的TrueType正文產生一個路徑,產生的區域是字符框加上正文,而不是正文自己,能夠在把TextOut放入路徑括號以前設置背景模式爲透明的,這樣就能獲得由TrueType正文的輪廓封閉而成的區域。下面是說明這個過程的例程代碼:
GetClientRect(hwnd, &r);
BeginPath(hdc);
TextOut(hdc, r.left, r.top, "Defenestration can be hazardous", 4);
EndPath(hdc);
SelectClipPath(hdc, RGN_AND);
FillRect(hdc, &r, GetStockObject(GRAY_BRUSH))。
另: wsprintf();
做用
函數wsprintf()將一系列的 字符和數值輸入到 緩衝區
輸出 緩衝區裏的的值取決於格式說明符(即"%")。
若是寫入的是文字,此函數給寫入的文字的末尾追加一個'\0'。
函數的返回值是寫入的長度,但不包括最後的'\0'。
語法:
int wsprintf(
LPTSTRlpOut, // 輸出 緩衝區,最大爲1024字節
LPCTSTRlpFmt, // 格式字符串
...) // 需輸出的參數;
;多少個參數均可以的
不過若是 緩衝區和寫進緩衝區的數據類型同樣,能夠不使用格式 字符串。例: char* a=new char;
char* b="abcd";
wsprintf(a,b);
cout<<a<<endl;
輸出結果爲: abcd
咱們在接觸C語言的時候還接觸過一個sprintf()的函數,
用法和wsprintf()基本同樣,區別在於:
wsprintf()包含在頭文件 windows.h
sprintf()包含在頭文件 stdio.h中。
wsprintf其實分爲 wsprintfA 和 wsprintfW,前者對應 sprintf,後者對應 wsprintf。
wsprintf 有 1024   字符限制,並且不支持浮點數。
因此注意了,該函數不支持浮點數的輸入輸出
用法
nt wsprintf( LPTSTR lpOut, // 輸出緩衝區,最大爲1024字節
LPCTSTR lpFmt, // 格式字符串 ,
... // 需輸出的參數);
使用此函數可將數字轉爲字符串;
例:int x=6;
LPTSTR szBuffer=new TCHAR[1024];);//定義並申請輸入 緩衝區空間
wsprintf(szBuffer,「%d「,x);//應用
3>SetTextAlign
功能:
該函數爲指定設備環境設置文字對齊標誌。
原形:
UINT SetTextAlign(
HDC hdc,     // 設備環境句柄
UINT fMode   // 文本對齊選項
);
參數:
hdc
[輸入] 設備環境句柄.
fMode
[輸入] 使用下面的列表中的掩碼指定文本對齊方式。在橫向對齊和縱向對齊標誌中只能選擇一個。另外,兩個標誌只能選擇一個來改變當前的位置。
TA_BASELINE
基準點在正文的基線上。
TA_BOTTOM
基準點在限定矩形的下邊界上。
TA_TOP
基準點在限定矩形的上邊界上。
TA_CENTER
基準點與限定矩形的中心 水平對齊
TA_LEFT
基準點在限定矩形的左邊界上。
TA_RIGHT
基準點在限定矩形的右邊界上。
TA_RTLREADING
對於中東Windows版,正文從右到左的閱讀順序排列,與缺省的從左到右正好相反。
只有當被選擇的字體是Hebrew或Arabic時,此值纔有用。
TA_NOUPDATECP
每次文字輸出調用後當前基準點不改變。基準點是傳輸給正文輸出函數的位置。
TA_UPDATECP
每次文字輸出調用後當前基準點改變。當前位置做爲基準點。
若當前字體有一條缺省的垂直基線(如Kanji),下列值用於取代TA_BASELINE和TA_CENTER,各值含義爲:
VTA_BASELINE
基準點在正文的基線上。
VTA_CENTER
基準點與限定矩形的中心 垂直對齊
缺省值是TA_LEFT, TA_TOP和TA_NOUPDATECP。
若是 函數調用成功,返回值是文字對齊方式的前一個設置;
若是 函數調用失敗,返回值是GDI_ERROR。
Windows NT:若想得到更多 錯誤信息,請調用GetLastError函數。
4>GetSystemMetrics ()
功能:用於獲得被定義的系統數據或者系統配置信息.
語法:
int WINAPI GetSystemMetrics( __in int nIndex);
下面是GetSystemMetrics函數參數nIndex的定義:
SM_ARRANGE 標誌用於說明系統如何安排最小化窗口..詳細請參看下方備註.:
根據顯示器顯示的不一樣,系統數據可能有所不一樣.
該SM_ARRANGE設置指定系統如何安排最小化窗口,幷包含一個起始位置和方向。起始位置可爲下列值之一。
Value
Meaning
ARW_BOTTOMLEFT
開始在左下角的屏幕(默認位置) 。
ARW_BOTTOMRIGHT
開始在右下角的屏幕上。至關於ARW_STARTRIGHT.
ARW_HIDE
在屏幕可見區域,隱藏並最小化窗口。.
ARW_TOPLEFT
從左上角的屏幕上。至關於ARV_STARTTOP.
ARW_TOPRIGHT
至關於ARW_STARTTOP | SRW_STARTRIGHT 。
方向的安排能夠爲下列值之一。
Value
Meaning
ARW_DOWN
縱向排列,從上到下。
ARW_LEFT
水平排列,從左到右。
ARW_RIGHT
水平排列,從右到左。
ARW_UP
縱向排列,從下到上。
SM_CLEANBOOT 返回系統啓動方式
0 正常啓動
1 安全模式啓動
2 網絡安全模式啓動
SM_CMOUSEBUTTONS 返回值爲系統支持的 鼠標鍵數,返回0,則系統中沒有安裝鼠標。
SM_CXBORDER,
SM_CYBORDER 返回以像素值爲單位的Windows窗口邊框的寬度和高度,若是Windows的爲3D形態,則等同於SM_CXEDGE參數
SM_CXCURSOR,
SM_CYCURSOR 返回以像素值爲單位的標準光標的寬度和高度
SM_CXDLGFRAME,
SM_CYDLGFRAME 等同與SM_CXFIXEDFRAME and SM_CYFIXEDFRAME
SM_CXDOUBLECLK,
SM_CYDOUBLECLK 以像素值爲單位的雙擊有效的矩形區域
SM_CXEDGE,SM_CYEDGE 以像素值爲單位的3D邊框的寬度和高度
SM_CXFIXEDFRAME,
SM_CYFIXEDFRAME 圍繞具備標題但沒法改變尺寸的窗口(一般是一些對話框)的邊框的厚度
SM_CXFRAME,SM_CYFRAME 等同於SM_CXSIZEFRAME and SM_CYSIZEFRAME
SM_CXFULLSCREEN,
SM_CYFULLSCREEN 全屏幕窗口的窗口區域的寬度和高度
SM_CXHSCROLL,
SM_CYHSCROLL 水平滾動條的高度和水平滾動條上箭頭的寬度
SM_CXHTHUMB 以像素爲單位的水平滾動條上的滑動塊寬度
SM_CXICON,SM_CYICON 系統缺省的圖標的高度和寬度(通常爲32*32)
SM_CXICONSPACING,
SM_CYICONSPACING 以大圖標方式查看Item時圖標之間的間距,這個距離老是大於等於
SM_CXICON and SM_CYICON.
SM_CXMAXIMIZED,
SM_CYMAXIMIZED 處於頂層的最大化窗口的缺省尺寸
SM_CXMAXTRACK,
SM_CYMAXTRACK 具備可改變尺寸邊框和 標題欄的窗口的缺省最大尺寸,若是窗口大於這個
尺寸,窗口是不可移動的。
SM_CXMENUCHECK,
SM_CYMENUCHECK 以像素爲單位計算的菜單選中標記位圖的尺寸
SM_CXMENUSIZE,
SM_CYMENUSIZE 以像素計算的菜單欄按鈕的尺寸
SM_CXMIN,SM_CYMIN 窗口所能達到的最小尺寸
SM_CXMINIMIZED,
SM_CYMINIMIZED 正常的最小化窗口的尺寸
SM_CXMINTRACK,
SM_CYMINTRACK 最小跟蹤距離,當使用者拖動窗口移動距離小於這個值,窗口不會移動。
SM_CXSCREEN,
SM_CYSCREEN 以像素爲單位計算的屏幕尺寸。
SM_CXSIZE,SM_CYSIZE 以像素計算的 標題欄按鈕的尺寸
SM_CXSIZEFRAME,
SM_CYSIZEFRAME 圍繞可改變大小的窗口的邊框的厚度
SM_CXSMICON,
SM_CYSMICON 以像素計算的小圖標的尺寸,小圖標通常出如今窗口 標題欄上。
SM_CXVSCROLL,
SM_CYVSCROLL 以像素計算的垂直滾動條的寬度和垂直滾動條上箭頭的高度
SM_CYCAPTION 以像素計算的普通窗口標題的高度
SM_CYMENU 以像素計算的單個菜單條的高度
SM_CYSMCAPTION 以像素計算的窗口小標題欄的高度
SM_CYVTHUMB 以像素計算的垂直滾動條中滾動塊的高度
SM_DBCSENABLED 若是爲TRUE或不爲0的值代表系統安裝了雙字節版本的USER.EXE,爲FALSE或0則不是。
SM_DEBUG 若是爲TRUE或不爲0的值代表系統安裝了debug版本的USER.EXE,爲FALSE或0則不是。
SM_MENUDROPALIGNMENT 若是爲TRUE或不爲0的值下拉菜單是右對齊的不然是左對齊的。
SM_MOUSEPRESENT 若是爲TRUE或不爲0的值則安裝了鼠標,不然沒有安裝。
SM_MOUSEWHEELPRESENT 若是爲TRUE或不爲0的值則安裝了滾輪鼠標,不然沒有安裝。(Windows NT only)
SM_SWAPBUTTON 若是爲TRUE或不爲0的值則鼠標左右鍵交換,不然沒有。
index值:
SM_CXSCREEN = 0 'X Size of screen
SM_CYSCREEN = 1 'Y Size of Screen
SM_CXVSCROLL = 2 'X Size of arrow in vertical scroll bar.
SM_CYHSCROLL = 3 'Y Size of arrow in horizontal scroll bar
SM_CYCAPTION = 4 'Height of windows caption
SM_CXBORDER = 5 'Width of no-sizable borders
SM_CYBORDER = 6 'Height of non-sizable borders
SM_CXDLGFRAME = 7 'Width of dialog box borders
SM_CYDLGFRAME = 8 'Height of dialog box borders
SM_CYHTHUMB = 9 'Height of scroll box on horizontal scroll bar
SM_CXHTHUMB = 10 ' Width of scroll box on horizontal scroll bar
SM_CXICON = 11 'Width of standard icon
SM_CYICON = 12 'Height of standard icon
SM_CXCURSOR = 13 'Width of standard cursor
SM_CYCURSOR = 14 'Height of standard cursor
SM_CYMENU = 15 'Height of menu
SM_CXFULLSCREEN = 16 'Width of client area of maximized window
SM_CYFULLSCREEN = 17 'Height of client area of maximized window
SM_CYKANJIWINDOW = 18 'Height of Kanji window
SM_MOUSEPRESENT = 19 'True is a mouse is present
SM_CYVSCROLL = 20 'Height of arrow in vertical scroll bar
SM_CXHSCROLL = 21 'Width of arrow in vertical scroll bar
SM_DEBUG = 22 'True if deugging version of windows is running
SM_SWAPBUTTON = 23 'True if left and right buttons are swapped.
SM_CXMIN = 28 'Minimum width of window
SM_CYMIN = 29 'Minimum height of window
SM_CXSIZE = 30 'Width of title bar bitmaps
SM_CYSIZE = 31 'height of title bar bitmaps
SM_CXMINTRACK = 34 'Minimum tracking width of window
SM_CYMINTRACK = 35 'Minimum tracking height of window
SM_CXDOUBLECLK = 36 'double click width
SM_CYDOUBLECLK = 37 'double click height
SM_CXICONSPACING = 38 'width between desktop icons
SM_CYICONSPACING = 39 'height between desktop icons
SM_MENUDROPALIGNMENT = 40 'Zero if popup menus are aligned to the left of the memu bar item. True if it is aligned to the right.
SM_PENWINDOWS = 41 'The handle of the pen windows DLL if loaded.
SM_DBCSENABLED = 42 'True if double byte characteds are enabled
SM_CMOUSEBUTTONS = 43 'Number of mouse buttons.
SM_CMETRICS = 44 'Number of system metrics
SM_CLEANBOOT = 67 'Windows 95 boot mode. 0 = normal, 1 = safe, 2 = safe with network
SM_CXMAXIMIZED = 61 'default width of win95 maximised window
SM_CXMAXTRACK = 59 'maximum width when resizing win95 windows
SM_CXMENUCHECK = 71 'width of menu checkmark bitmap
SM_CXMENUSIZE = 54 'width of button on menu bar
SM_CXMINIMIZED = 57 'width of rectangle into which minimised windows must fit.
SM_CYMAXIMIZED = 62 'default height of win95 maximised window
SM_CYMAXTRACK = 60 'maximum width when resizing win95 windows
SM_CYMENUCHECK = 72 'height of menu checkmark bitmap
SM_CYMENUSIZE = 55 'height of button on menu bar
SM_CYMINIMIZED = 58 'height of rectangle into which minimised windows must fit.
SM_CYSMCAPTION = 51 'height of windows 95 small caption
SM_MIDEASTENABLED = 74 'Hebrw and Arabic enabled for windows 95
SM_NETWORK = 63 'bit o is set if a network is present.
SM_SECURE = 44 'True if security is present on windows 95 system
SM_SLOWMACHINE = 73 'true if machine is too slow to run win95.
用法:
GetSystemMetrics函數能夠獲取系統分辨率,但這只是其功能之一,GetSystemMetrics函數只有一個參數,稱之爲「索引」,這個索引有75個 標識符,經過設置不一樣的標識符就能夠獲取系統分辨率、 窗體顯示區域的寬度和高度、滾動條的寬度和高度。
爲了使GetSystemMetrics的功能,咱們以獲取系統分辨率爲例,並將其中的兩個值用TextOut輸出到 窗體中。
第一步:用GetSystemMetrics獲取屏幕的寬度和高度
1. int x, y;
2. x = GetSystemMetrics(SM_CXSCREEN);//屏幕寬度
3. y = GetSystemMetrics(SM_CYSCREEN);//屏幕高度
第二步:用TextOut輸出分辨率
由於x和y的值是int類型,因此沒法用TextOut直接輸出,須要藉助wsprintf函數,在C中,能夠用printf函數直接將字符串輸出到屏幕上,但wsprintf是將字符串輸出到一個char字符 數組中,並且wsprintf會返回輸出字符串的長度。
1.TCHARszBuffer[10];
2.intx =1024;
3.inty =768;
4.intiLength;
5.iLength = wsprintf(szBuffer, TEXT("%5d"),x);
小提示:szBuffer 數組的長度必定要大於x的長度,不然不能輸出。
以上這段代碼,是用wsprintf將x的值存入szBuffer中,而後在iLength中存放x的長度。這一步實際上解決了兩個問題,將int類型的屏幕寬度轉爲了TCHAR類型,TextOut函數能夠直接輸出TCHAR類型字符串,並且獲取了字符串的長度,那麼咱們就能夠用TextOut函數在 窗體中輸出屏幕的寬度:
TextOut(hdc, 0, 0, szBuffer, iLength);
5>GetClientRect
功能:該函數獲取窗口客戶區的座標。客戶區座標指定客戶區的左上角和右下角。因爲客戶區座標是相對窗口客戶區的左上角而言的,所以左上角座標爲(0,0)
原形:
在Win32 SDK, 該API函數原型爲
BOOL GetClientRect(
HWND hWnd, // 窗口句柄
LPRECT lpRect // 客戶區座標
);
在MFC中,該函數的原型爲void GetClientRect(LPRECT lpRect) const;
參數:
hWnd:是程序窗口的句柄。
lpRect:是一個 指針,指向一個RECT類型的rectangle結構。該結構有四個LONG字段,分別爲left、top、right和bottom。GetClientRect將這四個字段設定爲窗口顯示區域的尺寸。left和top字段一般設定爲0。right和bottom字段設定爲顯示區域的寬度和高度(像素點數)。 也能夠是一個CRect對象指針。CRect對象有多個參數,與RECT用法相同。
函數的做用總的來講就是把客戶區的大小寫進第二個參數所指的Rect結構當中。
返回值:
若是函數成功,返回一個非零值。
若是函數失敗,返回零。要獲得更多的 錯誤信息,請使用 GetLastError函數。
6 > GetTextMetrics
函數功能:
該函數把程序當前的字體信息,存放到TEXTMETRIC(即MSDN原文中的specified buffer)中。
函數原型:
BOOL GetTextMetrics(HDC hdc, LPTEXTMETRIC lptm);
參數:
hdc:設備環境句柄。
lptm:指向結構TEXTMETRIC的 指針,該結構用於得到字體信息。
返回值:
若是 函數調用成功,返回值非零,若是函數調用失敗,返回值是0。
Windows NT\2000\XP:若想得到更多 錯誤信息,請調用GetLastError函數。
Windows 95/98/Me:對於這樣的版本,須要去下載Microsoft layer提供的MSLU(詳見:2008年12月的MSDN).
須要:
Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;
頭文件:wingdi.h;
庫文件:gdi32.lib;
Unicode:在Windows NT環境下實現爲Unicode和ANSI兩種版本。
包含的頭文件:afxwin.h
示例:
BOOL GetTextMetrics(
LPTEXTMETRIC lpMetrics
) const; 
參數結構爲
TEXTMETRIC Structure
The   TEXTMETRIC  structure has the following form:
typedef struct tagTEXTMETRIC { /* tm */
int tmHeight; int tmAscent;
int tmDescent;
int tmInternalLeading;
int tmExternalLeading;
int tmAveCharWidth;
int tmMaxCharWidth;
int tmWeight;
BYTE tmItalic;
BYTE tmUnderlined;
BYTE tmStruckOut;
BYTE tmFirstChar;
BYTE tmLastChar;
BYTE tmDefaultChar;
BYTE tmBreakChar;
BYTE tmPitchAndFamily;
BYTE tmCharSet;
int tmOverhang;
int tmDigitizedAspectX;
int tmDigitizedAspectY;
} TEXTMETRIC;
The   TEXTMETRIC  structure contains basic information about a physical font. All sizes are given in logical units; that is, they depend on the current mapping mode of the display context.
For more complete information about this structure, see   TEXTMETRIC in the Win32 SDK documentation.
相關文章
相關標籤/搜索