1、windows函数入口
我们之前控制台编程的主函数都是int main();但是windows编程需要另一个主函数WinMain()函数:
#include <windows.h>
#include <tchar.h>
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow)
{
MessageBox(NULL, _T("FIRSTAPP"), _T("title"), MB_OK);
return 0;
}
我用的是vs2019,我们要注意在项目属性里面把系统选项从控制台变成窗口。
WINAPI我们转到定义其实发现就是——stdcall,确定一种调用方式,参数从右往左压入栈。
首先分析一下里面的参数;
HINSTANCE:指的是句柄,实质是一个跟踪资源的指针。
hPrevInstance:父程序的句柄;
lpCmdLine:相当于main里面的参数argv,argc.
ncmdshow—— 最后一个参数是启动期间传递给应用程序的一个整数,指出如何打开程序的窗口.
看起来比较复杂,用的多了就知道了;
2、MessageBox()函数
这是一个很常用的函数,用于创建一个模式对话框。
参数说明:
第一个参数:要创建的消息框的所有者窗口的句柄。如果此参数为NULL,则消息框没有所有者窗口。
第二个:对话框内容;
第三个:标题;
第四个:按钮。MB形式,OK就是确定,还有其他形式可以自己试试。
3、宽窄字符转换
我们默认的unicode字符就是宽字符,一个字符两个字节,ASCII编码就是窄字符。我们在程序中加入了tchar.h头文件,其实就是编译器可以自动实现宽窄字符的转换。比如messagebox是一个中型的函数,_T可以根据字符集选择不同的字符形式。其实messageboxa代表窄字符作为参数,messageboxw表示宽字符作为参数。
4、windows常见数据类型
虽然c++定义了很多数据类型,但是为了程序移植的方便(在WIN98中int 和short int一样都是两字节,但是在win7中int四个字节),windows定义了自己的数据类型(用typedef a int的形式)。
举一些例子:
HINSTANCE:比如这种H开头的代表句柄;
INT,WORD,DWORD,STR等代表和C一样的数据类型,只是大小写不同。
LPSTR:P,LP开头的代表一个指针。这里就是字符串指针;
nCmdShow:C开头的代表常量,比如这里就是int类型的常量;
这样我们看到这些奇怪的数据类型就不怕了,只要查看定义就可以轻易知道意思。