Every Day's Gain

Larry.Zhao's Coding Diary
随笔 - 23, 文章 - 1, 评论 - 2, 引用 - 0
数据加载中……

窗体消息处理函数的局部变量

总是不注意细节!终于把位图显示出来了,昨天困扰了我1个多小时的问题,今天用了20分钟终于查出来了,还是细节的问题.
测试我写的类,在窗体消息处理函数WndProc里面定义:
bool flag=false;
CMyBitMapFile   file1;
然后响应加速键弹出通用对话框选择要打开的文件,然后把flag=true,再调用 InvalidRect来呼叫WM_PAINT,然后响应PAINT里面if(flag){//显示位图},一开始什么反应都没有,我广设MessagBox发现没有进入if(flag)块,这个就让我想了很长时间,最后才想到,每发一次消息就调用一次WndProc,InvalidRect呼叫了WM_PAINT后,flag又被设置成false了,改正之后,又发现我类里的数据成员的指针变成NULL了,一开始我还觉得很奇怪,还好有了flag的警示,很快就想到了我的file1也是局部变量.
唉,当时看书的时候就很奇怪WndProc里很多变量都声明成static,不得其解,现在教训让我明白了这个道理.

posted @ 2005-07-13 10:28 Larry.Zhao's Coding Diary 阅读(257) | 评论 (0)编辑 收藏

无题

基本没有什么进度,把头信息成功的读出来了,显示文件还是有问题,下午看了1个来钟头把,没有什么成果。晚上出去吃饭了,回来就9点钟了,时间全部被聊天和帮陈凯、白小林解决问题用掉,一眼自己的代码也没有看。以后坚决不能开QQ,开了就忍不住聊~~

posted @ 2005-07-13 00:15 Larry.Zhao's Coding Diary 阅读(106) | 评论 (0)编辑 收藏

注意指针运算

今天这个问题困扰了我很久。取一个位图函数头,书上的方法是:
PBYTE                                  pFile;
BITMAPFILEHEADER *    pmbfh;
BITMAPV5HEADER    *    pmbih;
pFile=malloc(dwFileSize);
ReadFile(hFile, pFile,.....);
pmbfh=(BITMAPFILEHEADER *)pFile;
pmbih=(BITMAPV5HEADER  *)(pFile  + sizeof(BITMAPFILEHEADER));

我写类的时候为了方便就直接往文件头里面读:
pmbfh=(BITMAPFILEHEADER * )malloc(dwFileSize);
ReadFile(hFile, pmbfh,.....);
pmbih=(BITMAPV5HEADER  *)(pmbfh  + sizeof(BITMAPFILEHEADER));


读数据一切正常,可是在从pmbih结构体里读取位图信息的时候报错,我最后没有办法,把读出的数据用二进制显示来看哪里的问题。最终问题是出在这里:pmbih=(BITMAPV5HEADER  *)(pmbfh  + sizeof(BITMAPFILEHEADER));
pmbfh是位图文件头类型的指针,加上一个整数,按照指针运算,会依照自己指向类型的大小移动,而sizeof返回的是后面位图文件头结构体的字节单位大小,所以移动的偏移量不对了。而pFile本身就是字节型的指针,所以是正确的。以后要注意指针运算。

posted @ 2005-07-13 00:07 Larry.Zhao's Coding Diary 阅读(311) | 评论 (0)编辑 收藏

仅列出标题
共3页: 1 2 3