附件点击下载:ShowMine.rar

扫雷也可以这样玩 
 

在WinMain()里先对PROCS结构初始化

RPOCS里包含插入线程的全局变量和要装入API的函数名和函数指针

然后在Winmine里申请两个内存块,第一个用来放PROCS结构,第二个用来放第一个内存块的指针(第二个块的前四个字节)和代码

然后运行插入线程,插入的线程用前面的PROCS结构的指针(==第一个块的指针)访问PROCS结构成员,PROCS结构里包含在插入线程以前获得的GetModuleHandle(),LoadLibrary(),GetProcAddress()的地址(看罗云彬的书学的,由于不会PEB)->再然后依次获得要用到的函数地址->替换原Winmine的窗口过程->创建自己的窗口

在自己的窗口过程中创建三个CompatilbeDC,第一个用来存放Winmine中窗口显示的各个图画-> 
第二个用来存放自己计算出来的整个画面,第三个用来存放那个小窗口的画面

在替换的Winmine过程中检查两个消息:
1、检查是否有刷新的动作,如果有则刷新第二个CompatibleDC
2、检查WM_MOUSEMOVE来刷新第三个CompatilbeDC并刷小窗口

不知道这样说行不?
我也是初学乍道,有说的不对或写的不对的地方希望大家帮忙指出来,小弟感激不尽
一开始上传了一个竖着的图片嫌太占地方,就重传了一个横着的,请版主把那个竖着的删除文件名是bbs.pediy.com/upload/2006/41/image/c.jpg

  • 标 题: 答复
  • 作 者:天涯浪人
  • 时 间:2006-03-19 16:26

找着了,Winmine有一个变量(bFlag 初始值是0)专门存放玩家上次点的图标的代表值(0x41,0x42...)
当接受到WM_LBUTTONUP消息时就cmp bFlag,0:
    如果不相等的话就跳
    如果相等就SetTimer()开始记时,同时检测点的是不是雷,如果是的话就从第一个位置开始往后找,找到第一个不是雷的地方,把放到那儿。

我在PROCS结构中也加了一个变量用来指向bFlag,接到WM_LBUTTONUP时检查它指向的bFlag是不是0。