kingkamg兄,消消气嘛~每个人第一次遇到这种问题都会迷惑的~
恕我直言,你的方法也有待商榷,不够OO。
邪恶的全局变量在这个场合是不需要的。将wxGrid的指针公有化,更是不必要。
第三种方法,shiweifu还没获得wxGrid的指针呢,怎么发?
shiweifu,我看到你在我博客上的留言了,也看到了你的帖子:
http://forums.wxwidgets.org/viewtopic.php?p=96733#96733
你说
我试着去找wxFrame类似GetPanel的函数。。可惜没找到
你是不可能在wxFrame里找到类似GetPanel的函数的。你需要明白,wxFrame是用作一般用途,不是专门为有Panel的Frame设计的,因此如果加上一个GetPanel这样的函数,是不对的,所以没有。wxFrame只会知道,它hold着一个个指向wxWindow的指针,而不会知道那些wxWindow其实是wxPanel还是wxButton。
你试图用FindWindowByName把指向wxWindow的指针找到,再转回下去到wxPanel,这个方法是可行的,但并不是推荐的做法。尽可能不要使用类型转换。另外,正如Auria指出的,那个Name并不是你指针的变量名,而是你在创建wxGrid或wxPanel时给它的名字——构造函数里的。请仔细阅读文档。
这个问题有两种解决方法:
一种情况适用于,当初在把wxGrid加入wxPanel的时候,你是在wxFrame的构造函数里直接编码的(而不是建了一个wxPanel的子类,在子类的构造函数里做)。
这种情况下,因为你终究都是要new一个wxGrid并让一个变量指向他的,你就把这个变量作为wxFrame的成员变量,这样你就可以在wxFrame类的其他方法中调用它了。
其实第一种情况也是不够OO的。因为应该把你的Panel封装成一个类。
从你的m_grid可以看出,你是把你的Panel封装成了一个类,你继承自wxPanel。
这个时候,你应当给你的子类增加一个方法,将你的m_grid暴露为public的GetGrid(),里面直接return m_grid。
这样,你就可以在wxFrame里呼唤它了。
建议多看Effective C++这样的书,能够在很大程度上使你面对这些问题不会有疑问。
-Utensil