c# 问题,为什么无法在窗体控件事件中使用类

c# 问题,为什么无法在窗体控件事件中使用类,第1张

看错误描述的不是很详细。不可以使用是指什么?

如果你想在窗体对象中使用外部类对象,那窗体对象中需要能得到这个外部类对象的引用才能使用。比如在窗口初始化时将外部类的实例传入,或是使用静态属性将外部类对象赋值给静态属性,然后窗口对象使用该静态属性获取外部类对象。

如果你指没法在窗口类中引用这个外部类。那么你将你的外部类在到窗口类中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已经获取到了*/

....

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11947320.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存