Chinaunix首页 | 论坛 | 博客
  • 博客访问: 509549
  • 博文数量: 54
  • 博客积分: 5016
  • 博客等级: 大校
  • 技术积分: 954
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-23 11:00
文章分类

全部博文(54)

文章存档

2009年(5)

2008年(49)

我的朋友

分类: LINUX

2008-04-09 10:37:45

上次写一个minigui程序时的一点点小结。(08.01.16)
 
1、处理MSG_PAINT消息,即使没有东西要处理,也必须加上:           
   hdc=GetClientDC(hWnd);
            ReleaseDC(hdc);
   两句话,否则会有想不到的界面绘制错误。
  
2、旋钮数字框(autospin),在设定上下限时,注意:WPARAM中放最小值,LPARAM中放最大值,这个和编程指南上有点出入(编程指南上原话为:设定可取的最大值和最小值,分别取 wParam 参数和 lParam参数的值)。
3、注意:旋钮数字框(autospin),步进时候都是整数步进的,不能以小数步进。
4、不要往空指针写东西。例如:char *p; sprintf(p, "%d", 50);这样写是不对的,在运行时会出现意想不到的错误。可以写成这样:char p[10]; sprintf(p, "%d", 50);
5、Makefile的命令行要以TAB键开头。
6、其他文件用不到的函数,我们可以定义成static,但是若其他文件要调用此函数,千万不要加static,默认为extern。
7、画波形函数放在MSG_PAINT消息里,每次窗口重叠过后,都要进行重绘,否则被重叠的部分将不再显示。
8、截图只截取需要的范围,截大的话可能会导致截到的位图不正确,比如是倾斜的。
9、创建菜单时,memset (&mii, 0, sizeof(MENUITEMINFO));这句话不可省略,否则会出错。
10、定义了一个FILEDLGDATA结构,然后再截图保存位图时候,GetBitmapFromDC()出问题;若不定义FILEDLGDATA结构,没有什么为题。
    GDB调试,发现具体是GetBitmapFromDC()中GAL_memcpy (dstrow, srcrow, linelen);这个函数出了问题。再print dstrow 查看这个环境变量,发现:
    (gdb) print dstrow
    $1 = (Uint8 *) 0xf0ff

   
    上网请教后解决。原因如下:
    bitmap要调用函数InitBitmap()初始化位图文件。BITMAP里面的数据结构只保存了位图数据的指针,而不是数值 。
   
11、创建位图型按钮时, 
    CreateWindow (CTRL_BUTTON,     // PRCONIG
    "右",
    WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE | BS_BITMAP,
    IDC_RIGHTBUTTON,
    405, 395, 41, 26, hWnd, &struc_bmp[3].bmp);   注意,最后一个参数是BITMAP类型的指针,注意是指针!

12、尽量少用指针,如果要用到地址,可以对一个变量使用&取地址符号;指针虽然带来了很多好处,但是写程序时,容易出现混乱,所以最好使用变量,然后使用&取地址符号。假如确实需要使用指针,最好用malloc、calloc等函数动态分配一个大小的空间,如果不分配,可能会出现“段错误”或者程序异常结束等空间不可使用的错误。
13、字符串之间传递时,不可用“=”赋值号直接赋值,要使用字符串函数strcpy()函数进行拷贝。这点说起来都知道,但是实际用起来,容易忘记,值得注意。
阅读(2575) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~