挂海论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
 友情提示:文字/图片广告均非网站意见,请担保交易勿直接付款,由此产生的责任自负
游戏交易就上寄售网-专注稳定-诚信赢天下玩游戏来117游戏网(H5不下载也能玩手游传奇,吃鸡,竞技都有)天下盾/国内/免实名/免备案CDN无视一切CC/DD攻击 找塔科夫作者TG @wuhao1954 QQ283931494 →入驻S9企业发卡网各种全黑号辅助群:475351077
██【我要租此广告位】██... .
查看: 3335|回复: 11
打印 上一主题 下一主题

孙鑫VC笔记.CHM

[复制链接]
4中级会员
338/600

338

积分

112

主题

3

听众
已帮网友解决0 个问题
好评
0
贡献
226
海币
2949
交易币
0
跳转到指定楼层
楼主
发表于 2014-7-31 18:37:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提醒:若下载的软件是收费的"请不要付款",可能是骗子,请立即联系本站举报,执意要付款被骗后本站概不负责。(任何交易请走第三方中介,请勿直接付款交易以免被骗!切记).

友情提示:文字/图片广告均非本站意见,请担保交易勿直接付款,由此产生的责任自负!!!↑↑


孙鑫VC笔记.CHM
一.Windows程序内部运行原理1.关于消息和消息队列  系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序,MSG结构定义如下:typedef struct tagMsg{        HWND hwnd;        UINT message;   //消息种类,以WM_开头的一些消息        WPARAM wParam;  //这两个是消息的补充        LPARAM lParam;        DWORD time;    //消息被投递post的时间        POINT pt;     //这是一个点数据(结构体,有x、y),记录投递消息时光标cursor的屏幕坐标coordinate}MSG;2.windows程序的入口WinMain函数  int WINAPI WinMain(  HINSTANCE hInstance,      // handle to current instance  当前运行的实例句柄  HINSTANCE hPrevInstance,  // handle to previous instance 先前运行的实例句柄  LPSTR lpCmdLine,          // command line;lp开头(long pointer) 表示指针,str表示字符串;这里是命令行参数  int nCmdShow              // show state窗口显示状态(最大化、最小化……));(可以在运行里面输入notepad.exe 1.txt传递一个参数)3.窗口的创建          需要经过下面四个操作步骤:·设计一个窗口类·注册窗口类·创建窗口·显示及更新窗口1)typedef struct _WNDCLASS {    UINT            style;   //可以设为CS_HREDRAW,即窗口水平坐标变化时窗口全部重画   WNDPROC        lpfnWndProc; //回调函数(由系统调用),直接将函数名赋给此参数(即函数指针)   int             cbClsExtra;   //为窗口类分配附加内存空间(所有属于这个窗口类的窗口共享)   int             cbWndExtra;   //窗口实例附加内存空间   HANDLE         hInstance;    HICON           hIcon;    //用LoadIcon赋值   HCURSOR         hCursor;  //用LoadCursor   HBRUSH          hbrBackground; //画刷背景,这里用GetStockObject()获取,它参数是系统带的。如:=(HBRUSH)GetStockObject(BLACK_BRUSH),这里有强制类型转换   LPCTSTR         lpszMenuName;   //CT=constant……菜单名   LPCTSTR         lpszClassName;    //窗口类名} WNDCLASS;   经常会遇到一类变量,其每一位bit都对应某一种属性(1有0无),系统定义了一些常量(宏定义),只有一位为1,其余为0。若要同时用这几种特性,则用或运算|;要去掉某一特征,用取反~之后再进行与运算&即实现。(or有;and not取消,类似VB)HICON  LoadIcon(        HINSTANCE hInstance,   //若加载标准图标则为NULL(系统自带的,如IDI_APPLICATION)        LPCTSTR lpIconName);HGDIOBJ GetStockObject(  __in  int fnObject);2)然后用RegisterClass(&wndcls)注册窗口类ATOM RegisterClass(          CONST WNDCLASS *lpWndClass);3)再用hwnd=CreateWindow()创建窗口HWND CreateWindow(    LPCTSTR lpClassName,  //窗口类名,必须是先前设计的    LPCTSTR lpWindowName, //窗口名字    DWORD dwStyle,//窗口样式window styles,如WS_OVERLAPPEDWINDOW,若想去掉最大化按钮(加个&~WS_MAXIMIZEBOX)    int x,  //窗口初始位置,可设置为CW_USEDEFAULT,这样就忽略y的值了    int y,    int nWidth,  //宽度,也可用CW_USEDEFAULT    int nHeight,    HWND hWndParent,  //父窗口句柄,没有则为NULL    HMENU hMenu,      HINSTANCE hInstance,        LPVOID lpParam   //  作为WM_CREATE消息的参数lParam);4)显示窗口ShowWindowBOOL ShowWindow(       HWND hWnd,    int nCmdShow  //窗口状态,如SW_SHOWMAXIMIZED);之后用UpdateWindow(hwnd)刷新窗口,这里可有可无4.获取消息GetMessageBOOL GetMessage(      //获取到WM_QUIT消息时,返回值为0;其他为非0值    LPMSG lpMsg,    HWND hWnd,   //为NULL时表示属于当前线程的所有消息    UINT wMsgFilterMin,  //最低的消息值    UINT wMsgFilterMax   //最高消息值);        消息循环:        while(GetMessage(&msg,NULL,0,0))            {                TranslateMessage(&msg);   //将按键消息(KEYDOWN/KEYUP和对应字符的扫描码)转换成WM_CHAR消息                DispatchMessage(&msg);    //派送消息,将消息发送给窗口程序        }        return 0;5.窗口程序:LRESULT CALLBACK WindowProc(          //窗口名可随意取,这里CALLBACK其实就是__stdcall(标准调用格式,宏定义的)  HWND hwnd,      // handle to window  UINT uMsg,      // message identifier  WPARAM wParam,  // first message parameter  LPARAM lParam   // second message parameter){        switch(uMsg)        {                case WM_CHAR:   //按下按键                char szChar[20];                sprintf(szChar,"char is %d",wParam);  //格式化文本到一个内存区(buffer)                MessageBox(hwnd,szChar,"weixin",0);                break;        case WM_LBUTTONDOWN:                MessageBox(hwnd,"mouse clicked","weixin",0);                HDC hdc;                hdc=GetDC(hwnd);                TextOut(hdc,0,50,"计算机编程语言培训",strlen("计算机编程语言培训"));                ReleaseDC(hwnd,hdc);                break;        case WM_PAINT:                HDC hDC;                PAINTSTRUCT ps;                hDC=BeginPaint(hwnd,&ps);                TextOut(hDC,0,0,"维新培训",strlen("维新培训"));                EndPaint(hwnd,&ps);                break;        case WM_CLOSE:                if(IDYES==MessageBox(hwnd,"是否真的结束?","weixin",MB_YESNO))                {                        DestroyWindow(hwnd);                }                break;        case WM_DESTROY:                PostQuitMessage(0);                break;        default:                return DefWindowProc(hwnd,uMsg,wParam,lParam);                        }        return 0;}6.所用其他函数分析:1)int MessageBox(         HWND hWnd,    LPCTSTR lpText,  //显示的文本(存放到一个字符数组,或直接用“”括起输出字符)    LPCTSTR lpCaption,  //标题    UINT uType  // 样式,如MB_OK=0(方便就写0)/MB_OKCANCEL);返回值有:IDOK,IDNO,IDYES……2)画图、输出先用GetDC:HDC GetDC(  __in  HWND hWnd  //窗口句柄,若为NULL则返回整个屏幕的DC(device context设备上下文、环境));再用TextOut输出文本:BOOL TextOut(  __in  HDC hdc,  __in  int nXStart,   //这两者是文本输出的开始坐标  __in  int nYStart,  __in  LPCTSTR lpString,  //输出的文本  __in  int cbString            //输出的字符个数);注意最后要释放DC:用ReleaseDCint ReleaseDC(  __in  HWND hWnd,   __in  HDC hDC);3)WM_PAINT消息(窗口加载、窗口移动时窗口要重绘)先用        HDC hdc;PAINTSTRUCT ps;        hdc=BeginPaint(hwnd,&ps) //在重绘时获取DCHDC BeginPaint(  __in   HWND hwnd,  __out  LPPAINTSTRUCT lpPaint    //这里是PAINTSTRUCT变量的指针,如&ps);使用(如TextOut(hdc,0,0,"维新培训",strlen("维新培训")))完之后,要用EndPaint释放DCBOOL EndPaint(  __in  HWND hWnd,  __in  const PAINTSTRUCT *lpPaint);这里BeginPaint和EndPaint只能用WM_PAINT消息中4)WM_CLOSE(窗口即将关闭时的消息)   if(IDYES==MessageBox(hwnd,"是否真的结束?","weixin",MB_YESNO))   {          DestroyWindow(hwnd);    }经验:在条件测试的时候,一般把常量(IDYES)写在前面,不容易出错BOOL DestroyWindow(       //销毁窗口,程序还没退出,它会发送WM_DESTROY消息和WM_NCDESTROY消息    HWND hWnd);5)WM_DESTROY  //窗口销毁void PostQuitMessage(      //投递一个WM_QUIT消息给这个线程的消息队列     int nExitCode    //它用来当做WM_QUIT消息的wParam);6)其它消息:default:        return DefWindowProc(hwnd,uMsg,wParam,lParam);   //默认的窗口程序7.用VC编写:1)选择win32 application工程(选择空工程)2)添加C++源文件3)包含头文件:#include "windows.h"        #include "stdio.h"4) 写WinMain函数,可查msdn   int WINAPI WinMain(         HINSTANCE hInstance,    HINSTANCE hPrevInstance,    LPSTR lpCmdLine,    int nCmdShow);5)在WinMain函数中设计一个窗口类{        WNDCLASS wndcls;        wndcls.cbClsExtra=0;        wndcls.cbWndExtra=0;        wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);        wndcls.hIcon=LoadIcon(NULL,IDI_APPLICATION);        wndcls.hCursor=LoadCursor(NULL,IDC_ARROW);        wndcls.hInstance=hInstance;        wndcls.lpfnWndProc=WinSunProc;        wndcls.lpszClassName="first";        wndcls.lpszMenuName=NULL        wndcls.style=CS_HREDRAW | CS_VREDRAW;}6)在WinMain中注册窗口类        RegisterClass(&wndcls);7)创建窗口HWND hwnd;hwnd=CreateWindow("first","我第一个窗口",WS_OVERLAPPEDWINDOW,USER_DEFAULT,0,0,USER_DEFAULT,NULL,NULL,hInstance,NULL);8)显示窗口        ShowWindow(hwnd,SW_SHOWNORMAL);        UpdateWindow(hwnd);9)消息循环        MSG msg;        while(GetMessage(&msg,NULL,0,0)   //获取到WM_QUIT消息时才退出循环,注意这里是NULL表示接受所有消息        {                TranslateMessage(&msg);                DispatchMessage(&msg);        }        return 0; //winmain返回010)窗口过程LRESULT CALLBACK WindowProc(           //注意改名WinSunProc,和申明    HWND hwnd,    UINT uMsg,    WPARAM wParam,    LPARAM lParam){        switch(uMsg)        {        case WM_CHAR:                break;        case WM_LBUTTONDOWN:                break;        case WM_PAINT:                break;        case WM_CLOSE:                break;        case WM_DESTROY:                break;        default:                return DefWindowProc(hwnd,uMsg,wParam,lParam);        }        return 0;}11)编写具体过程:1.WM_CHAR:                char szChar[20];                sprintf(szChar,"asc is %d",wParam);                MessageBox(hwnd,szChar,"MyFirst",0);                2.WM_PAINT:                PAINTSTRUCT ps;                HDC hdc;                hdc=BeginPaint(hwnd,&ps);                TextOut(hdc,0,0,"painting...",strlen("painting..."));                EndPaint(hwnd,&ps);                break;3.WM_CLOSE:                if(IDYES==MessageBox(hwnd,"exit?","MyFirst",MB_YESNO))                {                        DestroyWindow(hwnd);                }                break;4.WM_DESTROY:                PostQuitMessage(0);                break;        default:                return DefWindowProc(hwnd,uMsg,wParam,lParam);        }        return 0; 孙鑫VC笔记.rar (101.81 KB, 下载次数: 17)

联系我时,请说是在 挂海论坛 上看到的,谢谢!



上一篇:逆向_c__.pdf
下一篇:谭浩强C语言程序设计 电子书教程
免责声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关。一切关于该内容及资源商业行为与www.52ghai.com无关。

2、本站提供的一切资源内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。

3、本站信息来自第三方用户,非本站自制,版权归原作者享有,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

4、如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵犯你版权的,请邮件与我们联系删除(邮箱:[email protected]),本站将立即改正。

2

积分

1

主题

2

听众
已帮网友解决0 个问题
好评
0
贡献
1
海币
839
交易币
0
沙发
发表于 2014-8-1 07:55:43 | 只看该作者
好东东啊,哈哈
3正式会员
140/300

140

积分

44

主题

10

听众
已帮网友解决0 个问题
好评
0
贡献
96
海币
4505
交易币
0
板凳
发表于 2014-8-16 11:23:57 | 只看该作者
不错,感谢无私和分享精神!

11

积分

6

主题

2

听众
已帮网友解决0 个问题
好评
0
贡献
5
海币
1634
交易币
0
地板
发表于 2014-8-28 07:51:45 | 只看该作者
这样也行。。。?

44

积分

22

主题

2

听众
已帮网友解决0 个问题
好评
0
贡献
22
海币
334
交易币
0
5#
发表于 2014-9-7 02:07:51 | 只看该作者
支持楼主、楼主英明啊!!!

2

积分

1

主题

1

听众
已帮网友解决0 个问题
好评
0
贡献
1
海币
715
交易币
0
6#
发表于 2014-9-15 18:33:08 | 只看该作者
我看一下,先说谢谢了

0

积分

0

主题

1

听众
已帮网友解决0 个问题
好评
0
贡献
0
海币
599
交易币
0
7#
发表于 2014-9-24 04:37:19 | 只看该作者
不错,感谢无私和分享精神!
3正式会员
220/300

220

积分

81

主题

1

听众
已帮网友解决0 个问题
好评
0
贡献
139
海币
992
交易币
0
8#
发表于 2014-12-19 12:53:24 | 只看该作者
LZ帖子不给力,勉强给回复下吧
3正式会员
118/300

118

积分

43

主题

2

听众
已帮网友解决0 个问题
好评
0
贡献
75
海币
3556
交易币
0
9#
发表于 2015-1-3 09:04:04 | 只看该作者
鼎力支持!!

34

积分

11

主题

3

听众
已帮网友解决0 个问题
好评
0
贡献
23
海币
797
交易币
0
10#
发表于 2015-1-7 00:12:17 | 只看该作者
真是被感动的痛哭流涕……
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

免责声明|Archiver|手机版|小黑屋|挂海论坛

GMT+8, 2024-5-9 19:40 , Processed in 0.503641 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.2

本站资源来自互联网用户收集发布,如有侵权请邮件与我们联系处理。xhzlw@foxmail.com

快速回复 返回顶部 返回列表