FRAMEWIN创建窗口为什么未激活
时间: 2023-08-20 16:03:59 浏览: 31
FRAMEWIN创建窗口默认是未激活状态,需要手动将其激活。可以通过调用`WM_SetFocus()`函数将窗口激活,或者在创建窗口时设置`WM_CF_ACTIVATE`标志来让窗口默认激活。
以下是使用`WM_SetFocus()`函数将窗口激活的示例代码:
```
FRAMEWIN_Handle = FRAMEWIN_Create("窗口标题", 0, 0, 200, 150, WM_CF_SHOW, 0);
WM_SetFocus(FRAMEWIN_Handle);
```
在这个例子中,我们使用`FRAMEWIN_Create()`函数创建了一个窗口,并设置了`WM_CF_SHOW`标志来使窗口显示出来。然后,我们使用`WM_SetFocus()`函数将窗口激活,使其可以响应键盘和鼠标事件。
如果想让窗口默认激活,可以在创建窗口时设置`WM_CF_ACTIVATE`标志,如下所示:
```
FRAMEWIN_Handle = FRAMEWIN_Create("窗口标题", 0, 0, 200, 150, WM_CF_SHOW | WM_CF_ACTIVATE, 0);
```
在这个例子中,我们将`WM_CF_ACTIVATE`标志设置为窗口的创建标志之一,这样窗口创建后就会自动激活,不需要手动调用`WM_SetFocus()`函数。
相关问题
framewin显示中文
要在framewin中显示中文,需要确保以下几点:
1. 使用支持中文的字体,例如宋体、黑体等;
2. 将中文字符串转换为UTF-8编码;
3. 使用Unicode API函数进行字符串操作。
下面是一个简单的示例代码,可以在framewin中显示中文:
```
#include "DIALOG.h"
void MainTask(void) {
GUI_Init();
GUI_SetFont(&GUI_Font16B_ASCII);
FRAMEWIN_SetFont(FRAMEWIN_Create("窗口标题", 0, 0, 200, 150), &GUI_Font16B_ASCII);
FRAMEWIN_AddCloseButton(FRAMEWIN_Handle, FRAMEWIN_BUTTON_RIGHT, 0);
FRAMEWIN_SetTextAlign(FRAMEWIN_Handle, GUI_TA_HCENTER);
FRAMEWIN_SetText(FRAMEWIN_Handle, "你好,世界!"); // 中文字符串需要转换为UTF-8编码
while (1) {
GUI_Delay(100);
}
}
```
在这个例子中,我们使用了GUI_Font16B_ASCII字体,并将其设置为framewin的字体。然后,我们使用FRAMEWIN_SetText函数设置framewin的文本为“你好,世界!”。由于中文字符串需要转换为UTF-8编码,因此可以使用在线工具或者编写转换函数来实现。最后,我们使用GUI_Delay函数进入一个无限循环,保证程序不会退出。
emwin两层界面点击Framewin上close按钮返回上一层代码
在emWin中,关闭窗口的一般方法是使用 `GUI_EndDialog()` 函数。对于 `Framewin` 窗口,可以通过以下步骤在关闭窗口时返回到上一层:
1. 在打开 `Framewin` 窗口时,保存其父窗口的句柄(通常为 `WM_GetParent(hWin)`),可以使用全局变量或其他方式保存。
2. 在关闭 `Framewin` 窗口时,调用 `GUI_EndDialog(hWin, 0)` 函数关闭窗口,并在回调函数中使用 `GUI_EndDialog(pParent, 0)` 函数返回到上一层。其中,`pParent` 为保存的父窗口句柄。
以下是示例代码片段:
```c
// 定义全局变量保存父窗口句柄
WM_HWIN hParent;
// 打开 Framewin 窗口时保存父窗口句柄
void OpenFramewin(void) {
// ...
hParent = WM_GetParent(hWin);
// ...
}
// 关闭 Framewin 窗口时返回到上一层
void CloseFramewin(WM_HWIN hWin) {
GUI_EndDialog(hWin, 0);
GUI_EndDialog(hParent, 0);
}
// 在回调函数中调用 CloseFramewin 函数
void _cbFramewin(WM_MESSAGE * pMsg) {
switch (pMsg->MsgId) {
case WM_CLOSE:
CloseFramewin(pMsg->hWin);
break;
// ...
}
}
```