易语言教程_易语言源码_易语言视频教程_易语言论坛

 找回密码
 点击注册

Vip新手入门区
新手学习指南  学员作品展示 Vip课程总纲  Vip绝密课程系列

Vip相关下载区
Vip模块下载   Vip模块绑定   Vip模块例子 魔鬼插件下载  魔鬼插件例子  教程工具下载

Vip论坛服务区
教程问题提问区   模块问题提问区 技术交流区   魔鬼插件建议   忘记密码找回

VIP会员办理QQ: 8643245   
【请先加好友,然后到好友列表双击联系客服,办理VIP会员。】
【基础篇】易语言辅助入门基础教程
VIP模块办理QQ: 7189694 办理正版魔鬼作坊VIP模块 【基础篇】OD与CE入门基础教程
办理【终身VIP会员】“秒杀价” 仅需 RMB278.00元… 【基础篇】零基础绝密汇编语言入门课程 (共26课已完成)…
办理VIP详情…猛击这里查看详情 【基础篇】VIP辅助入门基础教程-新手必学 已发布10课 ……
VIP教程免费试看章节…猛击下载 【第1款】制作“辅助挂”教程目录查看(共107+16_x64下更新课已完成)…
亲爱的VIP学员,请到此写下你学习的感受与发布作品截图… 【第2款】制作“任务挂”教程目录查看(共77+1_x64下更新课已完成)…
卍解吧!不用bp send类封包断点找CALL的各种通杀思路 【第3款】驱动过保护技术课程(共38课已完成)…
【绝密教程】VIP绝密教程系列---注意:随时会更新! 【第4款】VIP邪恶二叉树辅助课程 (共31+17_x64下更新课已完成)…
【精品第13款】3D射击游戏与页游透视 智辅课程 已完成17课… 【第5款】零基础易语言按键辅助教程 (30课已完成)…
【精品第14款】变态功能辅助是如何炼成的 已完成36课… 【第6款】从零开始学习封包辅助技术教程(20课已完成) …
【精品第15款】DNF商业变态辅助的修炼之路 已完成27课… 【第7款】大杀特杀分析来源与CALL吸血鬼课程 (56课已完成)
【精品第16款】中控台多线程多开自动化商业辅助课程 已完成66课… 【第8款】完全零基础网页辅助课程(40课已完成)
【全新精品第17款】检测原理与过游戏内存检测技术课程 已发布9课… 【第9款】自动登录与操控LUA技术课程 (共46+8_x64下更新课已完成)…
【全新精品第18款】手游全自动化任务脚本辅助课程 已发布25课…… 【第10款】网页辅助封包脱机进阶课程 已完成30课…
【全新精品第19款】D3D方框骨骼透视与自瞄辅助课程进阶篇 已发布34课…… 【第11款】VC++ Lua脚本辅助课程 已完成112课…
【全新精品第20款】 X64模拟器吃鸡游戏方框透视自瞄辅助课程 发布中... 【第12款】网游脱机封包智辅课程 已完成35课…
查看: 2170|回复: 6

每日C++菜鸟自学中每日总结!

[复制链接]

19

主题

115

回帖

86

积分

终身VIP会员

Rank: 7Rank: 7Rank: 7

魔鬼币
78151
发表于 2010-10-7 19:41:13 | 显示全部楼层 |阅读模式
大家一起来吧!别感觉C++难就不学了!过保护就靠他了!
我也是菜鸟!才学C++没多久!
要学MFC我们就需要知道一点:windows是基于消息的!所以的动作都是基于消息!他和控制台应用程序一样都要有一个入口点函数!该函数为:
WinMain 其定义如下:

int WINAPI WinMain(
  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int nCmdShow              // show state
);

在这里
HINSTANCE  其含义为实例句柄(程序自身)  
LPSTR   其含义为指向一个长字符串的指针
如果要处理窗口消息就必须要加入一个WindowProc(窗口过程函数) 因为所有的消息都会通过WindowProc来分发,其定义如下:
LRESULT CALLBACK WindowProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);
第一个参数为用于接收消息的窗口句柄
第二个参数 它是用于标识该消息的数字(也称为消息ID)
第三个和第四个参数是附加消息.
比如窗口大小的发生改变,那么uMsg就会接收到一个为WM_SIZE!但它的参数则会在wParam中比如SIZI_RESTORED,SIZE_MINMIZED,SIZE_MAXMIZED,SIZE_MAXSHOW,SIZE_MAXHIDE等等,也就是说wParam里保存着是否最大化,是否最小化,是最大化,最小化还是隐藏.但窗口的大小是多少,新的宽度和高度的相关值则保存在lParam中.

53

主题

109

回帖

134

积分

终身VIP会员

Rank: 7Rank: 7Rank: 7

魔鬼币
55135
发表于 2010-10-8 09:03:57 | 显示全部楼层
哈哈,学习一下。。。。

19

主题

115

回帖

86

积分

终身VIP会员

Rank: 7Rank: 7Rank: 7

魔鬼币
78151
 楼主| 发表于 2010-10-8 11:57:23 | 显示全部楼层
本帖最后由 onlycast 于 2010-10-8 12:07 编辑

知道这两个函数后我们还需要知道一个类那就是WNDCLASS 其参数如下:
typedef struct _WNDCLASS {
    UINT       style;      类的样式!可以参考MSDN
    WNDPROC    lpfnWndProc;  窗口过程函数
    int        cbClsExtra;   类的额外空间
    int        cbWndExtra; 窗口的额外空间
    HINSTANCE  hInstance;  应用程序实例号
    HICON      hIcon;   图标样式
    HCURSOR    hCursor;  光标样式
    HBRUSH     hbrBackground;  用户区的背景颜色
    LPCTSTR    lpszMenuName;  菜单名
    LPCTSTR    lpszClassName;  类名

知道这三个以后我们就可以来创建一个窗口了

第一步我们打开VC++6  file菜单下的new选择win32 application 起个名 建一个空的工程 然后再从file 菜单下选择C++ sourec file

要先写winmain函数在里面来完成相应的功能 我们要用到windows的函数和C的函数所以先在开头引用两个头文件
#include <windows.h>
#include <stdio.h>
//定义一个全局的窗口句柄
HWND hwnd;
LRESULT CALLBACK WindowProc(
                        HWND hwnd,      // handle to window
                        UINT uMsg,      // message identifier
                        WPARAM wParam,  // first message parameter
                        LPARAM lParam   // second message parameter
);

//开始写主函数
int WINAPI WinMain(
  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int nCmdShow              // show state
)
{
//定义一个类的名字的静态变量
static TCHAR szAppName[]=TEXT("HelloWin");
//定义一个消息标识ID变量
MSG msg;
//定义一个WNDCLASS的类
WNDCLASS wndclass;
//指定类的类型,这里是当窗口发生改变时重画
wndclass.style=CS_HREDRAW | CS_VREDRAW;
//窗口过程函数
wndclass.lpfnWndProc=WindowProc;
//类的额外空间
wndclass.cbClsExtra=0;
//窗口的额外空间
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;  //应用程序实例号
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_APPSTARTING);
//获取一个图像对像来设定背景色
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
//菜单名
wndclass.lpszMenuName=NULL;
//类名 在上面我们定义的szAppName
wndclass.lpszClassName=szAppName;
//接着我们要注册这个类
//为了程序的稳定加入一个判断
if (!RegisterClass(&wndclass))
        {
                  MessageBox(NULL,TEXT("This Program requires windows NT!"),szAppName,MB_ICONERROR);
          return 0;
        }
//接着开始创建窗口 CreateWindow会返回一个应用程序的实例句柄
hwnd=CreateWindow(szAppName,TEXT("The Hello program"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
//创建完成后我们要把窗口显示出来
ShowWindow(hwnd,SW_SHOWNORMAL);
//接着更新窗口
UpdateWindow(hwnd);
//建立消息循环
while (GetMessage(&msg,NULL,0,0))
        {
                //转换键盘消息;
                TranslateMessage(&msg);
                //将消息发送给窗口过程
                DispatchMessage(&msg);
        }
        return msg.wParam;
}
//对我们的窗口做一些处理这时就要用到窗口过程函数WindowProc 因为winmian函数要调用它,所以我们要在程序的最上面来声明它
LRESULT CALLBACK WindowProc(
                        HWND hwnd,      // handle to window
                        UINT uMsg,      // message identifier
                        WPARAM wParam,  // first message parameter
                        LPARAM lParam   // second message parameter
)
{
   HDC hdc;   //设备描述表句柄
   PAINTSTRUCT ps;  //一个绘图结构
   RECT rect;  //矩形
//建一个分支结构来处理一些消息
switch(uMsg)  
        {
//窗口过程函数接到第一个消息就是创建消息我们让它在创建的时候播放一点音乐格式为wav的
//PlaySound第一个参数为音乐文件名或一个资源,第二个参数指定只有当第一个参数为资源时才能使用所以设为NULL
//第三个参数指定一些选项这里指定为异步方式。好处在这不用等待它完成就返回!
        case WM_CREATE:
                PlaySound(TEXT("stage_clear.wav"),NULL,SND_FILENAME |SND_ASYNC);
                return 0;
//当窗口的客户区的一部分或者全部变为无效,但又必须刷新,那么将由这个消息通知程序
//比如窗口创建之初
        case WM_PAINT:
                //开始窗口绘制
                hdc=BeginPaint(hwnd,&ps);
            //获取窗口客户区尺寸
                GetClientRect(hwnd,&rect);
                //显示文本串
//第一个参数是BeginPaint返回的设备描述表句柄,第二个参数是要输出的文本,第三个参数为-1,指示文本串是以字节0结尾
//第四个参数指定了一个矩形,最后一个参数指示了文本必须显示在一行上,而水平和垂直方向都位于第4个参数的中央
                DrawText(hdc,TEXT("Hello windows xp!"),-1,&rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER);
                //结束窗口绘制
                EndPaint(hwnd,&ps);
                return 0;
//当窗口被关闭之前会收到一个销毁窗口的消息此时会收到一条WM_QUIT的消息而WM_QUIT会返回一个0,这样就会导致winmian退出消息循环并终止程序
    case WM_DESTROY:
                //在消息队列中插入一条退出消息
                PostQuitMessage(0);
                return 0;
        }
        //执行默认的消息处理
        return DefWindowProc(hwnd,uMsg,wParam,lParam);
}







这个程序至少调用了18个windows的函数:
LoadIcon 加载图标样式供程序使用
LoadCursor 加载鼠标指针样式供程序使用
GetStockObject 获取一个图形对象
RegisterClass 注册一个窗口类
MessageBox 显示一个消息框
CreateWindow 根据我们定义的窗口类来创建一个窗口
ShowWindow 在屏幕上显示窗口
UpdateWindow 指示窗口刷新自己本身
GetMessage 从消息队列中获取消息
TranslateMessage 转换某些键盘消息
DispatchMessage 将消息发送给窗口过程
PlaySound 播放一个声音文件
BeginPaint 开始窗口绘制
GetClientRect 获取窗口客户区的大小
DrawText 显示文本串
EndPaint 结束窗口绘制
PostQuitMessage 在消息队列中插入一条“退出”消息
DefWindowProc 执行默认的消息处理

在这里因为PlaySound函数在C++的默认库中没有所以我们要导入一个这个库
选中project 选中set 然后选中link
在object/library里加入一条 winmm.lib 然后确定

0

主题

12

回帖

6

积分

编程入门

Rank: 1

魔鬼币
5355
发表于 2010-10-10 19:06:12 | 显示全部楼层
呵呵,过保护不一定要C++

3

主题

70

回帖

40

积分

终身VIP会员

尛G

Rank: 7Rank: 7Rank: 7

魔鬼币
8468
发表于 2010-10-11 12:03:30 | 显示全部楼层
现在易语言也可以的,只是需要模块,加注入输入法

67

主题

208

回帖

359

积分

终身VIP会员

Rank: 7Rank: 7Rank: 7

魔鬼币
28488
发表于 2014-2-14 19:37:33 | 显示全部楼层
回帖是一种美德

4

主题

22

回帖

18

积分

终身VIP会员

Rank: 7Rank: 7Rank: 7

魔鬼币
9899
发表于 2015-7-30 13:18:23 | 显示全部楼层
觉得好的给点铜币好吗,为什么无法出售啊   
您需要登录后才可以回帖 登录 | 点击注册

本版积分规则

魔鬼作坊|易语言教程|易语言源码|易语言论坛|易语言视频教程| 论坛导航|免责申明|手机版||网站地图
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表魔鬼作坊立场!
任何人不得以任何方式翻录、盗版或出售本站视频,一经发现我们将追究其相关责任!
我们一直在努力成为最好的编程论坛!
Copyright© 2010-2019 All Right Reserved.
快速回复 返回顶部 返回列表