开始windows的编程开发....因为我用的是vs2019,并没有找到win32项目的位置,而且我实验了 c++ for Windows空项目不行,可能我不知道怎么操作的关系...
所以我发现这里这个桌面应用程序这里也可以做到,应该是微软有某些新标准导致...
创建win32程序的方式在vs2019要改成这样的形式....然后下一步直接创建就好了...
然后我屏蔽了wWinMain函数,拿了课程代码来操作...
顺道一说,不要吝啬注释,尤其是新手阶段,疯狂注释就好了......到了领悟了代码的意义之后,逐步减少你不必要的注释即可.....
学会看函数:
int WINAPI _tWinMain(......) {........}
返回值 调用约定 函数名 (参数列表) { 函数内部 }
调用约定的意思:https://www.cctry.com/thread-288828-1-1.html
然后为了了解MessageBox()这个函数的返回值,用我们c#程序员惯用的思维就是F12,但是....
懵逼了,引导到了一个一点都不优美的,叠一块的,连分号都节省的一堆语句里....
认真想一下(问了e大....).因为教程上老师说过函数体怎么读,然后我画了几个框框,总算读懂了...
然后这个int返回值的具体含义,1是msdn(选中函数按F1),2就是百度谷歌搜一遍了...
笔记:
我看的课件已经到了: https://www.bilibili.com/video/av79302998?p=57
win的类型自定义这个学起来需要蛮用心的,因为这太复杂了.....就好像之前说的,int已经不是单纯的int...
Windows 编程为什么要定义一套自己的数据类型呢?
为了解决以上问题,微软使用typedef关键字,为很多常用的C/C++类型均定义了别名,这样一来,要解决源代码移植问题,只需在目标平台上定义相同的一套类型别名,
即可解决大部分问题,很是方便,这其实也是为程序的扩展性考虑的。
DWORD 实质上就是unsigned long数据类型,32位无符号整型。 HANDLE 类型实质上是void, HANDLE定义为: typedof PVOID HANDLE; HANDLE 实际上就是一个PVOID,那PVOID又是什么呢? typeof void* PVOID; PVOID 就是指向void的指针
然后学习了一个下载函数 URLDownloadToFile
接着新人的问题又要出现了,这个问题就是,
我无法按照课程写的就可以让vs顺利执行(下面这句).
#pragma comment (lib, "Urlmon.lib")
然后发现用鼠标瞄准 URLDownloadToFile 按F1,前往msdn,看到要引用头文件,我引用了一下就可以了..
#include "WindowsProject1.h" #include <Windows.h> #include <tchar.h> #pragma comment (lib, "Urlmon.lib")//表示链接lib这个库。 #include "Urlmon.h" // 和在工程设置里写上链入.lib的效果一样(两种方式等价,或说一个隐式一个显式调用), // 不过这种方法写的 程序别人在使用你的代码的时候就不用再设置工程settings了 int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPTSTR lpCmdLine, int nShowCmd) { //下载文件 https://www.bilibili.com/video/av79302998?p=58
HRESULT ret = URLDownloadToFile( NULL, //不是ActiveX控件 _T("https://s.cctry.com/images/eagle2.png"), //下载的地址 _T("E:/JingJoin/WindowsProject1/aa.png"), 0, //保留的参数,必须为0 NULL//下载状态的指针 ); //判断文件是否下载成功 if (S_OK == ret) MessageBox(NULL, _T("下载成功!"), _T("下载提示"), MB_OK); else MessageBox(NULL, _T("下载失败!"), _T("下载提示"), MB_OK | MB_ICONERROR | MB_DEFBUTTON1); return 0; }
微软真的妙啊,cpp喜欢改异名关键字,然后msdn还写了应该调用他们的什么异名关键字.
这样就可以写出在不同平台风格也能运行的代码...