前言
剛開始進(jìn)入Win32開發(fā)時,會發(fā)現(xiàn)一些變量類型似乎在C語言中未曾見過。其實這些變量類型或是與C/C++已有的數(shù)據(jù)類型相近的,是通過C語言的原始類型重新定義而成的。引入這些數(shù)據(jù)類型的主要目的是為了便于程序員開發(fā)Windows應(yīng)用程序,增強程序的可讀性;另一個目的是為了便于代碼移植,從16位操作系統(tǒng)升級到32位操作系統(tǒng)的過程中,這些重新定義的數(shù)據(jù)類型就起了相當(dāng)重要的作用。
這些重新定義的變量類型就叫做Windows數(shù)據(jù)類型,主要定義在Windef.h的系統(tǒng)頭文件中。當(dāng)包含了Windows.h或者其他任何Windows頭文件,都會自動包含Windef.h.。下面列舉出一些常見的Win32數(shù)據(jù)類型:
一、初識MFC
1、MFC的動態(tài)鏈接和靜態(tài)鏈接:
在使用MFC應(yīng)用程序向?qū)陆üこ虝r,選擇“As a statically linked library”這個選項會編譯器把MFC類庫代碼編譯到執(zhí)行文件內(nèi)部;選擇“As a shared DLL”使用系統(tǒng)內(nèi)有共享的MFC動態(tài)庫。前者編譯出來的雖然尺寸較大,但是不需要系統(tǒng)提供動態(tài)庫支持更加安全。在各個軟件公司內(nèi)一般要求使用靜態(tài)鏈接,要求新建MFC工程時都使用靜態(tài)鏈接方式。
2、API和MFC的關(guān)系:
API(Application Programming Interface):應(yīng)用程序編程接口,是由操作系統(tǒng)提供給開發(fā)者的C語言格式的全局函數(shù)。第三節(jié)用到的GetDlgItemInt和SetDlgItemInt函數(shù)就是API函數(shù),這些函數(shù)是與對象無關(guān)的C格式函數(shù)。Win32是面向API的編程平臺,操作系統(tǒng)提供的API數(shù)量相當(dāng)龐大,而且沒有分類難于組織和記憶。
MFC(Microsoft Fundation Classes):微軟的基礎(chǔ)類庫,這個類庫分類封裝了大部分Windows API,便于開發(fā)人員分類了解類庫函數(shù)功能。學(xué)習(xí)過C++封裝原理都知道,沒有封裝類的函數(shù)接口無論功能有多么強大,但是對于開發(fā)者來說都是難于使用和難于記憶的。就如同沒有機箱和按鈕的電視機,選臺或調(diào)節(jié)音量就得到電視機主板上去找接口一樣。封裝類就就如同為電視機安裝上機箱和按鈕而且還有遙控器,選臺調(diào)節(jié)音量操作都非常方便。
MFC封裝的數(shù)據(jù)類型不是函數(shù)庫而是類庫,最常用的基本類型有字符串類(CString)、文件類(CFile)和時間類(CTime)等。用于幾何空間的類有坐標(biāo)點(CPoint)、空間尺寸(CSize)和矩形區(qū)域類(CRect)等,還有用來記錄個群體數(shù)據(jù)的集合類,鏈表(CList)、動態(tài)數(shù)組(CArray)和映射類(CMap)等等。
C++成員函數(shù)尾部帶const修飾,表示該函數(shù)禁止修改類對象內(nèi)的數(shù)據(jù),稱作“只讀成員函數(shù)”或者“常成員函數(shù)”。MFC類庫中有大量此類成員函數(shù),表示調(diào)用該成員函數(shù)時對象自身不會被改變。
二、初始相關(guān)API
代碼如下(示例):
LPCSTR 中C代表 const char*
LPSTR 沒有C就是char*
以前從Main函數(shù)入口現(xiàn)在從WinMain入口
int CALLBACK WinMain(
_In_ HINSTANCE hInstance,
_In_ HINSTANCE hPrevInstance,
_In_ LPSTR lpCmdLine,
_In_ int nCmdShow
);
1、彈出消息:圖標(biāo)和文字
int WINAPI MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType);
2、查找主窗口:根據(jù)標(biāo)題或者窗口類型 返回類型也是hwnd窗口類型
HWND WINAPI FindWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName);
auto h = FindWindow("Notepad", NULL); //類型
HWND hwnd = FindWindow(NULL, "API知識點.txt - 記事本"); //標(biāo)題名
3、設(shè)置標(biāo)題文字:
BOOL WINAPI SetWindowText(HWND hWnd,LPCTSTR lpString);
4、獲取窗口標(biāo)題文字:
int WINAPI GetWindowText(HWND hWnd,LPTSTR lpString, int nMaxCount);
5、改變窗口位置和大小:
BOOL WINAPI MoveWindow(
HWND hWnd,
int X,
int Y,
int nWidth,
int nHeight,
BOOL bRepaint
);
對FindWindow、SetWindowText、GetWindowText基礎(chǔ)應(yīng)用:文章來源:http://www.zghlxwxcb.cn/news/detail-500834.html
#include<Windows.h>
int WinMain(
_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPSTR lpCmdLine,
_In_ int nShowCmd
) {
auto h = FindWindow("Notepad", "API知識點.txt - 記事本");
auto x = FindWindow("Notepad", "提綱.txt - 記事本");
if (!h)
return -1;
// bool b = SetWindowText(h, "hhh");
char s[256];
int n = GetWindowText(h, s, sizeof(s));
SetWindowText(x, s);
return 0;
}
附錄
什么是API(Application Programming Interface)
a)第一方接口:C語言函數(shù)庫,C++類庫(STL) Standard Template Library,
b)第二方接口:是操作系統(tǒng)提供的函數(shù)庫:比如windows下是CreateThread、linux下是pthread_create
c)第三方接口:某個公司的接口,比如mysql是Oracle公司提供的mysql.h里面的所有函數(shù)。
opencv是IBM研發(fā)的圖形開發(fā)庫,包括識別,生成框圖,計算面積等等。
點云(PCL)庫包括三維形狀的計算等等文章來源地址http://www.zghlxwxcb.cn/news/detail-500834.html
到了這里,關(guān)于初識MFC第一天的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!