mfc动态创建资源id
时间: 2023-10-06 17:08:25 浏览: 74
MFC中可以使用`Add`函数动态创建资源ID。具体步骤如下:
1. 在资源编辑器中创建一个空白的对话框或菜单等资源;
2. 在代码中调用`Add`函数创建资源ID;
3. 使用创建的资源ID来操作控件。
下面是一个例子,动态创建一个按钮控件:
```cpp
CButton* pButton = new CButton();
pButton->Create(_T("Dynamic Button"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(10, 10, 110, 30), this, 1001);
```
在上面的例子中,`Create`函数用于创建一个按钮控件,第一个参数是按钮的文本,第二个参数是按钮的风格,第三个参数是按钮的位置和大小,第四个参数是按钮的父窗口,最后一个参数是按钮的资源ID,可以自己定义。在这里,我们定义的资源ID是1001。
注意,使用动态创建的资源ID时,需要在资源ID的前面添加一个前缀,以便与静态资源ID区分。例如,在上面的例子中,我们可以定义一个前缀`IDC_DYNAMIC_`,然后将资源ID定义为`IDC_DYNAMIC_BUTTON`,这样就避免了与静态资源ID的冲突。
相关问题
MFC动态创建MenuID
在MFC中动态创建MenuID需要以下步骤:
1. 在资源视图中添加一个菜单(比如IDR_MENU1),并在其中添加一个子菜单项(比如ID_DYNAMIC_MENU)。
2. 在你的应用程序类的头文件中添加菜单ID定义:
```cpp
#define ID_DYNAMIC_MENU_FIRST 50000
#define ID_DYNAMIC_MENU_LAST 50500
```
3. 在你的应用程序类的.cpp文件中添加以下函数:
```cpp
void CMyApp::AddDynamicMenuItems(CMenu* pMenu)
{
// 按需添加动态菜单项
for (int i = ID_DYNAMIC_MENU_FIRST; i < ID_DYNAMIC_MENU_LAST; i++)
{
CString strMenuText;
strMenuText.Format(_T("Dynamic Menu Item %d"), i - ID_DYNAMIC_MENU_FIRST + 1);
pMenu->AppendMenu(MF_STRING, i, strMenuText);
}
}
```
4. 在你的主框架窗口类的.cpp文件中添加以下代码:
```cpp
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext)
{
// 创建视图窗口
...
// 创建菜单条
if (!m_wndMenuBar.Create(this))
{
TRACE0("Failed to create menubar\n");
return FALSE;
}
m_wndMenuBar.SetBarStyle(m_wndMenuBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
// 创建菜单
CMenu* pMenu = m_wndMenuBar.GetMenu();
if (!pMenu->LoadMenu(IDR_MENU1))
{
TRACE0("Failed to load menu\n");
return FALSE;
}
// 添加动态菜单项
((CMyApp*)AfxGetApp())->AddDynamicMenuItems(pMenu->GetSubMenu(0));
// 更新菜单
m_wndMenuBar.DrawMenuBar();
return TRUE;
}
```
这样就可以在你的菜单中动态添加菜单项了。注意,菜单项ID必须在ID_DYNAMIC_MENU_FIRST和ID_DYNAMIC_MENU_LAST之间。
mfc动态创建一个资源
在 MFC 中,可以使用以下代码动态创建一个资源:
1. 首先,在资源编辑器中创建你需要动态创建的资源。
2. 假设你创建了一个名为 IDC_MYDIALOG 的对话框资源,你可以使用以下代码创建它并显示:
```
CDialog dlg;
dlg.Create(IDD_MYDIALOG);
dlg.ShowWindow(SW_SHOW);
```
其中,IDD_MYDIALOG 是你在资源编辑器中分配给对话框的 ID。
3. 在创建资源后,你可以使用以下代码来设置对话框的标题:
```
dlg.SetWindowText(_T("My Dialog"));
```
其中,_T("My Dialog") 是你想要设置的标题文本。
4. 最后,使用以下代码销毁对话框:
```
dlg.DestroyWindow();
```
以上是一个简单的例子,你可以根据需要调整和扩展它以创建其他类型的资源。