DuiLib中例如我定义了一个窗口 class MainFrameWnd :public WindowImplBase 里面重写了InitWindow和Notify以及HandleMessage等函数,这些函数实在哪里调用的, MainFrameWnd* main_frame_wnd = new MainFrameWnd; main_frame_wnd->Create(nullptr, MainFrameWnd::kClassName, UI_WNDSTYLE_FRAME, 0);我只调用了Create(...)函数,并没有调用重写的虚函数
时间: 2024-04-10 12:32:05 浏览: 15
在DuiLib中,重写的虚函数如InitWindow、Notify和HandleMessage等函数是在创建窗口后自动被DuiLib框架调用的。当调用Create函数创建窗口时,DuiLib会根据窗口类的类型创建对应的窗口实例。然后,在创建窗口的过程中,DuiLib会自动调用重写的虚函数来完成一些初始化工作和消息处理。
具体的调用流程如下:
1. 调用Create函数创建窗口实例,此时会触发窗口的构造函数。
2. 在Create函数内部,会调用RegisterWindowClass函数注册窗口类。
3. 调用CreateWindowEx函数创建真实的Windows窗口,并将窗口句柄保存到窗口实例中。
4. 调用OnInitWindow函数来初始化窗口,包括设置窗口样式、加载布局等。
5. 调用Notify函数来处理窗口的通知消息,比如点击按钮、选择列表项等操作。
6. 当窗口收到消息时,会自动调用HandleMessage函数来处理消息。HandleMessage函数会根据消息类型和内容执行相应的逻辑。
所以,当你调用Create函数创建窗口时,重写的虚函数会在相应的时机被自动调用。你无需手动调用这些虚函数,DuiLib框架会负责在合适的时机去调用它们。
相关问题
DuiLib中的HandleMessage函数详细介绍
在DuiLib中,HandleMessage函数是用于处理窗口消息的关键函数。它位于CDuiControl类中,是一个虚函数,可以在派生类中进行重写,以实现自定义的消息处理逻辑。
HandleMessage函数的原型如下:
```cpp
LRESULT CDuiControl::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
```
参数解释:
- uMsg:表示收到的消息类型,比如WM_PAINT、WM_KEYDOWN等。
- wParam:表示消息的附加参数,具体含义根据消息类型而定。
- lParam:表示消息的附加参数,具体含义根据消息类型而定。
返回值:
- LRESULT:表示消息处理的结果,通常是0或者一个非零值。
在派生类中重写HandleMessage函数时,可以根据uMsg的不同值来处理不同的消息。常见的消息类型包括但不限于:
- WM_CREATE:窗口创建消息。
- WM_DESTROY:窗口销毁消息。
- WM_PAINT:绘制窗口消息。
- WM_SIZE:窗口大小改变消息。
- WM_KEYDOWN、WM_KEYUP:键盘按键消息。
- WM_MOUSEMOVE、WM_LBUTTONDOWN、WM_RBUTTONDOWN:鼠标消息等等。
重写HandleMessage函数时,可以根据具体需求进行相应的处理逻辑。例如,在WM_KEYDOWN消息中,可以判断按下的键盘按键是哪个键,并执行相应的操作。在WM_PAINT消息中,可以绘制窗口的内容。
需要注意的是,在重写HandleMessage函数时,需要调用父类的HandleMessage函数来处理未被重写的消息,以保证窗口的正常处理流程。
总之,HandleMessage函数是DuiLib中用于处理窗口消息的重要函数,通过重写该函数可以实现自定义的消息处理逻辑。
DuiLib中调用Create函数DuiLib中的框架会做哪些事情,比如调用依次哪些函数
在DuiLib中,调用Create函数会触发DuiLib框架的一系列操作,包括以下几个步骤:
1. 调用RegisterWindowClass函数注册窗口类:
- 在RegisterWindowClass函数中,首先判断窗口类是否已经注册,若已注册则直接返回。
- 如果未注册,则创建一个WNDCLASS结构体,并设置其中的成员变量,包括窗口过程、窗口类名等。
- 调用RegisterClass函数注册窗口类。
2. 调用CreateWindowEx函数创建真实的Windows窗口:
- 在CreateWindowEx函数中,根据窗口的样式、类名等参数创建一个Windows窗口。
- 获取到窗口句柄,并将其保存到窗口实例中。
3. 调用OnInitWindow函数进行初始化:
- 在OnInitWindow函数中,会进行一系列的初始化工作,包括设置窗口样式、加载布局等。
- 这个函数可以在派生类中重写,以实现自定义的初始化逻辑。
4. 调用Notify函数进行通知消息处理:
- 在Notify函数中,会处理一些通知类消息,比如按钮点击、列表选择等。
- 这个函数也可以在派生类中重写,以实现自定义的通知消息处理逻辑。
5. 返回创建的窗口实例。
总之,调用Create函数后,DuiLib框架会依次执行注册窗口类、创建Windows窗口、进行初始化、处理通知消息等一系列操作。这些操作是为了完成窗口的创建和初始化,并确保窗口能够响应用户的操作。在具体的应用中,可以根据需要重写相关的函数来实现自定义的行为和逻辑。