如果你想在窗体对象中使用外部类对象,那窗体对象中需要能得到这个外部类对象的引用才能使用。比如在窗口初始化时将外部类的实例传入,或是使用静态属性将外部类对象赋值给静态属性,然后窗口对象使用该静态属性获取外部类对象。
如果你指没法在窗口类中引用这个外部类。那么你将你的外部类在到窗口类中new一下然后编译一下,编译器会提示是什么类型的错误的。象这样
a.b.c.d
d
=
new
a.b.c.d()
首先,你想取消添加的按钮事件可以Ctrl + Z,去撤销VS自动帮你添加的代码。其次,自己手动删除也行,添加一个事件处理,有3个地方要添加代码
1.
在头文件类的消息处理函数声明中:
Class CXXXWnd: public CWnd
{
protected:
DECLARE_MESSAGE_MAP()
afx_msg void OnLButtonDown(UINT nFlags, CPoint point)
}
2. .cpp消息映射中
BEGIN_MESSAGE_MAP(CMarkLineItemWnd, CDrawItemWnd)
ON_WM_LBUTTONDOWN()
//ON_MESSAGE( WM_MOUSEHOVER, OnMouseHover)
//ON_MESSAGE( WM_MOUSELEAVE, OnMouseLeave)
ON_WM_SIZE()
END_MESSAGE_MAP()
3. .cpp的消息处理函数
void CXXXWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
Cwnd::OnLButtonDown(nFlags, point)
}
可以通过内嵌汇编来做,先把文件转成汇编文件,看一下编译器是怎么搞的。gcc
-S
sss.c。
比如在X86上从function2来看,8(%ebp)是第一个参数,
12(%ebp)是第二个参数。大于12以上的就跑到function1的变量堆栈里面去了。之后根据function1里面的汇编代码找到a值(因为变量不一定是对齐放在堆栈里面的)。
也可以不用上面那样搞,突然想到还有一种更通用的方法,在进行function2调用前,使用内嵌汇编把a
push进去,之后在function2中通过16(%ebp)就可以访问获得。
function1()
{
var
a
....
__asm__
__volatile__(
"pushl
%1"
:"r"(a)
)
function2()
}
function2()
{
....
var
a
__asm__
__volatile__(
"movl
16(%%ebp),
%0"
:
"=r"(a)
)
/*a已经获取到了*/
....
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)