MFC两个或以上的类的参数传递的大问题和CButton类的一个小问题

2025-02-27 03:36:50
推荐回答(5个)
回答1:

我的建议如下:
1.由于军棋棋子数量并不是很多,且最大数量是固定的,建议你使用数组来定义棋子。能避开手动分配内存,则尽量避开。
2.“被点击的棋子”在整个棋盘是唯一的,则它应该被定义为全局变量,而不应该是static变量。此全局变量最好存放在CPP文件中,而不是H头文件中。在用到该变量的地方,使用extern声明。否则,你应该考虑传递该指针。
3.棋盘不应该是一个按钮,一个图片控件足够了。其实棋子也不应该是按钮。
4.消息反射,那是JAVA之类的语言玩的东西,C++中就别考虑这个了。

回答2:

我这里提点建议吧,看了下大概知道了你的意思。
1.棋盘上的透明按钮,可以这样做,这些透明按钮的点击WM_LBUTTONDOWN消息全部发送到VIEW里面,,可以使用POSTMESSAGE,并且最好带参数,这样在视图中可以判断它是棋盘上的空位置。应该不难做,这样就方面多了,
2,CChessButton这个类对应的所有按钮,同理,也把WM_LBUTTONDOWN消息都发送到VIEW里面。同样使用POSTMESSAGE,并带上参数,这样视图可以判断这个是棋子。
3.剩下的,如果已经点击了棋子,且现在点击的棋盘位置为空(或者说,透明按钮)就移动按钮。

最后,关于你的棋子指针的问题,
直接定义在视图中完全可以呀,为什么要定义全局?
如果你一定要使用全局的这个指针,你最好发上来,这个指针的定义,声明位置分别在哪!
好,有什么可以交流,就说到这吧。希望对你有帮助

回答3:

mark。个人觉得你的思路还不是很明确,动态创建的代价是比较大的,建议先理清思路。
有问题欢迎交流

回答4:

CButton 的Style提供了许多类型,如一般按钮\单选\复选等 在Create时指定

样子不一样 都是CButton类

回答5:

你为什么需要声明全局变量?如果你一定要可以这么弄,在WinAPP的cpp文件里面生明变量,比如CChessButton * pCChessButton,然后紧接着声明一个全局函数比如
CChessButton* GetChessButtonPtr(void) {return pCChessButton;}
这样就可以了,和MFC的AfxGetApp的做法一样。

我认为更好的方法是在直接生命在View里面呀。你在View里面建立的按钮,你在CChessButton里面访问CButton::GetParent()就得到了View的指针,然后就可以访问你在View里面的pChessButton了。

如果你要一个变量,使得整个程序都可以访问到,你可以在App里面声明或者在MainFrame里面声明,
若在App声明了一个指针pCChessButton,那么在程序任何地方都可以这么访问
((CChessApp*)AfxGetApp())->pChessButton
如果在MainFrame里面生命,就这么调用
((CMainFrame*)AfxGetMainWnd())->pChessButton