xinxirong 发表于 2015-6-11 10:46:18

AcEdjig:drag()在cad2004-2008版有问题

在cad2013版就没有问题。
具体现像是如果是简单的应用AcEdJig类是没有任何问题的,但是我要在sampler()里面接收键盘输入,同时再建立acedRegisterFilterWinMsg( myFilter);myFilter函数,对输入的关键字进行处理的话,如下:
BOOL myFilter(MSG *pMsg)
                        switch(pMsg->wParam)
                        {
                        case 'f':
                        case 'F':
                                acedPostCommand(_T("F "));
                                return TRUE;
                        case 'a':
                        case 'A':
                                acedPostCommand(_T("A "));
                                return TRUE;
                        case 0x1a:
                        case 'b':
                        case 'B':
                                acedPostCommand(_T("B "));
                                return TRUE;
                        case 'w':
                        case 'W':
                                acedPostCommand(_T("W "));
                                return TRUE;
                        case 'h':
                        case 'H':
                                acedPostCommand(_T("H "));
                                return TRUE;
                        default :
                                //acedPostCommand((ACHAR*)(pMsg->wParam));
                                return TRUE;//比如输入错了,以为圆弧是Z,则不处理该消息。
                        }
}
那么,当鼠标中键平移过程中,如果按下任何一个Key如A,即马上当机,出现0xC0000005错误异常,主要原因是drag()函数里没有判断eax是否为0就把eax置入ebp,导致内存访问错误。
临时解决办法:判断鼠标中键是否按下,再acedPostCommand(_T("A "));
新版的cad已经很严谨,解决了这些小小的错误。
页: [1]
查看完整版本: AcEdjig:drag()在cad2004-2008版有问题