谁说抄5遍没有用的?这次是第4遍,是技术交流,不违规吧?有vip来帮我一下吗
#include <Windows.h>LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, PSTR szCmdLine, int iCmdShow)
{
HWND hwnd;
MSGmsg;
WNDCLASS wndclass;
wndclass.style = CS_HREDRAW | CS_VREDRAW;//水平重绘,垂直重绘?
wndclass.lpfnWndProc = WndProc;//按F5后,发生错误,声明并定义后,错误已解决,原理暂不明.估计是柄和消息的原因
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;//两兄弟长的像,不知道干什么用的?来自WinUser.h中WNDCLASS结构中。估计是扩展的用处
wndclass.hInstance = hInstance; //第1参数,第1次使用,而且是赋给WinUser中的WNDCLASS的成员。即时之用?
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);//两个主要元素:图标和滑鼠的加载,以后再学
wndclass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); //湖北人背景?强制刷?这次画成灰的,果然有。
wndclass.lpszMenuName = NULL;//长指针以0结尾?下级菜单名?以后再学。
wndclass.lpszClassName = TEXT("省略范本里的主函数的第一个字符数组变量---这是第4遍抄写");//同上,成员真多啊
if (!RegisterClass(&wndclass))
return 0;
/*
以后慢慢认识这么些成员了,现在使用除WndProc之外的第1个函数RegisterClass了,册注类参数需要是
WNDCLASS的对像:wndclass;也就是抄写了半天的东西。总算成功了。
为什么要用这个结构的对像入参呢?因为需要穿裤衩的新建人物开始游戏啊....(见005窗口窗口课程讲解)
还是不明白啊,以后再慢慢明白吧。
hwnd = CreateWindow(11个参数);开始个性化吧,11参数需要认识,到此为止:前面的窗口类成员一堆,这里的也是一群
合计:10+11==21个新事物需要重新认识且爱上他们。
回到正题:现在使用除WndProc之外的第1个函数:RegisterClass之后的第2个函数:RegisterClass之后的第3个函数:
CreateWindow
下面开始抄写并初步理解11位新朋友了:
*/
hwnd = CreateWindow(
wndclass.lpszClassName,//01朋友:类名
TEXT("FishC makes me to finish this on the forth time"),//02朋友:字符串
WS_OVERLAPPEDWINDOW, //03朋友,暂时未知作用
//四大同名,我记得:窗口出生的地点和大小:
400,
300,//此时,窗左上点,离屏左上点,是500距离(详见FishC之前的教程,具体哪课忘了)
240,
320,//想起了自己的第一个手机:N81的屏幕分辨率
//还是要复习一下四大同名的名:CW_USEDDEFAULT==cw used default
NULL,//接下来是四大NULL,但老三是:hInstance,主函数的第1参数
NULL,
hInstance, //为何出现在此?以后再学
NULL
); //分号不能掉, F5试过成功,但缺符号。
return 0;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT uint, WPARAM wParam, LPARAM lParam)
{
;//定义后,错误和警告消失,原因未知
}
/*
有没有人告诉我,你不在意:
按下F5后,以下的问题怎么解决?
“Win32Project1.exe”(Win32):已加载“F:\programing\vs2013学习\课堂学习\012输入5遍\Win32Project1\Debug\Win32Project1.exe”。已加载符号。
“Win32Project1.exe”(Win32):已加载“C:\Windows\System32\ntdll.dll”。无法查找或打开 PDB 文件。
“Win32Project1.exe”(Win32):已加载“C:\Windows\System32\kernel32.dll”。无法查找或打开 PDB 文件。
“Win32Project1.exe”(Win32):已加载“C:\Windows\System32\KernelBase.dll”。无法查找或打开 PDB 文件。
“Win32Project1.exe”(Win32):已加载“C:\Windows\System32\user32.dll”。无法查找或打开 PDB 文件。
“Win32Project1.exe”(Win32):已加载“C:\Windows\System32\gdi32.dll”。无法查找或打开 PDB 文件。
“Win32Project1.exe”(Win32):已加载“C:\Windows\System32\msvcr120d.dll”。无法查找或打开 PDB 文件。
“Win32Project1.exe”(Win32):已加载“C:\Windows\System32\imm32.dll”。无法查找或打开 PDB 文件。
“Win32Project1.exe”(Win32):已加载“C:\Windows\System32\msctf.dll”。无法查找或打开 PDB 文件。
“Win32Project1.exe”(Win32):已加载“C:\Windows\System32\msvcrt.dll”。无法查找或打开 PDB 文件。
“Win32Project1.exe”(Win32):已加载“C:\Windows\System32\uxtheme.dll”。无法查找或打开 PDB 文件。
“Win32Project1.exe”(Win32):已加载“C:\Windows\System32\combase.dll”。无法查找或打开 PDB 文件。
“Win32Project1.exe”(Win32):已加载“C:\Windows\System32\rpcrt4.dll”。无法查找或打开 PDB 文件。
“Win32Project1.exe”(Win32):已加载“C:\Program Files\NETGATE\FortKnox Personal Firewall\protect.dll”。模块已生成,不包含符号。
“Win32Project1.exe”(Win32):已加载“C:\Windows\System32\psapi.dll”。无法查找或打开 PDB 文件。
“Win32Project1.exe”(Win32):已加载“C:\Windows\System32\ws2_32.dll”。无法查找或打开 PDB 文件。
“Win32Project1.exe”(Win32):已加载“C:\Windows\System32\advapi32.dll”。无法查找或打开 PDB 文件。
“Win32Project1.exe”(Win32):已加载“C:\Windows\System32\shell32.dll”。无法查找或打开 PDB 文件。
“Win32Project1.exe”(Win32):已加载“C:\Windows\System32\comctl32.dll”。无法查找或打开 PDB 文件。
“Win32Project1.exe”(Win32):已加载“C:\Windows\System32\nsi.dll”。无法查找或打开 PDB 文件。
“Win32Project1.exe”(Win32):已加载“C:\Windows\System32\sechost.dll”。无法查找或打开 PDB 文件。
“Win32Project1.exe”(Win32):已加载“C:\Windows\System32\shlwapi.dll”。无法查找或打开 PDB 文件。
“Win32Project1.exe”(Win32):已加载“C:\Windows\System32\msimg32.dll”。无法查找或打开 PDB 文件。
“Win32Project1.exe”(Win32):已加载“C:\Windows\System32\SHCore.dll”。无法查找或打开 PDB 文件。
“Win32Project1.exe”(Win32):已加载“C:\Windows\System32\profapi.dll”。无法查找或打开 PDB 文件。
“Win32Project1.exe”(Win32):已加载“C:\Windows\System32\dwmapi.dll”。无法查找或打开 PDB 文件。
程序“ Win32Project1.exe”已退出,返回值为 0 (0x0)。
*/ 以上,还是按逐行写好,按Ctrl + F5不出问题的工艺制作而成的。特贴出来以供交流。 一般来说不建议抄写代码,有这功夫不如去练打字,看代码 LRESULT CALLBACK WndProc(HWND hwnd, UINT uint, WPARAM wParam, LPARAM lParam)
{
;//定义后,错误和警告消失,原因未知
/*
过程中的第一件事,是什么事呢?显示?想起来了。
*/
//HDC myRectOnWin; //我想把hdc命名为myRect...不知道行不行
//PAINTSTRUCT pen;//同样想把ps换成笔
//RECT myRect; //看到这里,发现这个rect改成myRect才对,hdc就要变为myRectOnWin要好点吧
switch (uint)//看到这里,竟然发现抄写无意识:message是UINT类型的数据...不改试试能不能用吧
{
//case WM_PAINT://第一个事件:WM画
//myRectOnWin = BeginPaint(hwnd, &pen);
//EndPaint(hwnd, &pen);
//return0;//无论画不画,需要先返回0;此0是告该谁呢?
case WM_DESTROY: //析构窗口 还是 进入析构函数?
//PostQuitMessage(0); //估计是进入 析构函数,还是需要自己亲自写析构的,否则使用默认的会出问题。
PostQuitMessage(0);
return 0;
}
/*
经过以上折腾,最后的一句:不感性趣的,都扔给默认窗口过程(详见FishC课中讲话)
Default Window Processing == DefWindowProc 大概是此意吧
*/
return DefWindowProc(hwnd, uint, wParam, lParam); //第一个分支里,它不画,就在这里画
}
//完成了第4遍。谢谢上楼的建议,马上不抄了。
页:
[1]