在调整大小期间未调用窗体属性
form properties not called during resize
我有一个. net表单,具有布尔属性_isResized
,当SizeChanged
事件被调用时设置为true
,当bool isResized()
函数被调用时设置为false
。
ref class net_window : public System::Windows::Forms::Form
{
private:
bool _isResized;
public:
net_window(void)
: _isResized(false){
InitializeComponent();
}
void InitializeComponent(void){
this->SizeChanged += gcnew EventHandler(this, &net_window::eventResized);
}
bool isResized(void){
bool temp = _isResized;
_isResized = false;
return temp;
}
Void eventResized(Object^ sender, EventArgs^ e){
_isResized = true;
}
};
我还有一个本地c++类window
,它作为。net表单周围的层。这个类在主循环的每一帧都更新,并使用表单的bool isResized()
函数来查看大小是否发生了变化。
class Window
{
private:
void* _net_window_handle;
Window(){
_net_window_handle = new gcroot<net_window^>;
(*(gcroot<net_window^>*)_net_window_handle) = gcnew net_window;
}
~Window(){
delete _net_window_handle;
}
void update(void)//Called every frame.
{
if( (*(gcroot<net_window^>*)_element)->isResized() )
//Do stuff.
}
};
添加到SizeChanged
的委托在窗体被调整大小时被调用,因此_isResized
在窗体大小改变时被设置为true,但是由于某种原因,每当窗口类使用bool isResized()
函数时,主循环的线程冻结,直到用户释放窗体的边缘,因此调整大小已经完成。
是不可能访问。net表单值,只要它是调整大小。有别的选择吗?
感谢编辑
我使用一个主循环,每帧调用System::Windows::Forms::Application::DoEvents()
。当循环的线程进入这个函数并且主窗口正在调整大小时,它会冻结。有没有办法避免这个问题?
DoEvents strikes again. Windows pumps a modal message loop when the user starts dragging a window edge. Which means that your DoEvents loop isn't running anymore. Use a timer instead, SetTimer with a 15 or 31 msec interval is about right. Having your code respond to the Resize event directly of course highly preferred.
感谢汉斯·帕桑特
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- C++Borland Builder窗体-调用一个函数
- 在调用不同类的函数时刷新 Windows 窗体
- 从Windows窗体类调用PThread到Windows窗体类内的函数
- 从Windows窗体外部(从int WINAPI WinMain)调用Windows窗体方法
- 在调整大小期间未调用窗体属性
- 从c#调用DLL c++函数而不阻塞窗体控件
- 在.net c++中调用父窗体的子窗体函数