awtk/docs/how_to_use_dialog.md
2023-03-28 17:31:07 +08:00

80 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 如何使用对话框
对话框有模态和非模态两种,具体用法如下:
## 一、非模态对话框
非模态对话框的使用方法与普通窗口完全一样,只是对话框的大小和位置可以改变。通常情况下,尽量使用非模态对话框。
示例:
>完整代码请参考: [awtk-c-demos/demos/normal_dialog.c](https://github.com/zlgopen/awtk-c-demos/blob/master/demos/normal_dialog.c)
```c
static ret_t on_yes(void* ctx, event_t* e) {
tk_quit();
return RET_OK;
}
static ret_t on_no(void* ctx, event_t* e) {
window_close(widget_get_window(WIDGET(e->target)));
return RET_OK;
}
static ret_t on_open_dialog(void* ctx, event_t* e) {
widget_t* dlg = dialog_create_simple(NULL, 0, 0, 240, 160);
...
return RET_OK;
}
```
## 二、模态对话框
对于模态对话框,需要调用函数 dialog\_modal 等待对话框退出dialog\_modal 函数会阻塞直到 dialog\_quit 被调用。
在点击某个按钮时,如果要关闭对话框,一定要通过 dialog\_quit 函数,不能直接关闭对话框!!!
示例:
>完整代码请参考: [awtk-c-demos/demos/modal_dialog.c](https://github.com/zlgopen/awtk-c-demos/blob/master/demos/modal_dialog.c)
```c
static ret_t on_yes(void* ctx, event_t* e) {
dialog_quit(widget_get_window(WIDGET(e->target)), DIALOG_QUIT_YES);
return RET_OK;
}
static ret_t on_no(void* ctx, event_t* e) {
dialog_quit(widget_get_window(WIDGET(e->target)), DIALOG_QUIT_NO);
return RET_OK;
}
static ret_t on_open_dialog(void* ctx, event_t* e) {
int code = 0;
...
code = dialog_modal(dlg);
if(code == DIALOG_QUIT_YES) {
tk_quit();
}
return RET_OK;
}
```
在上面的代码中,下面的代码不会被执行,直到按钮被点击,然后调用 dialog_quit。
```c
if(code == DIALOG_QUIT_YES)
```
对于模态对话框来说,在确认按钮的事件处理函数中,除了调用 dialog_quit 函数,什么都别做!处理逻辑放到 dialog\_modal 之后,根据 dialog\_modal 的返回值决定下一步如何做。