平常都是用mfc,今天要用win32操作Dialog,从网上借鉴别人的代码, 已经完成,记录一下,方便以后熟悉。
1:CreateDialog(hInst, (LPCTSTR)IDD_MAIN, 0, (DLGPROC)MainDlgProc); 调用这个函数,用已经再资源模板画好的对话框创建一个dialog
2:在IDD_MAIN对话框资源上添加一个TAB控件,然后再添加几个对话框资源。
3:在MainDlgProc消息处理函数里面,收到WM_INITDIALOG消息的时候,初始化TAB控件
4:直接通过GetDlgItem获取TAB控件的窗口句柄,然后依次插入标签,再创建对应标签的对话框,并移动对话框到合适位置。
注意,对话框的属性设置为child,否则,当主窗口移动的时候,TAB里面的对话框不会跟随移动。伪代码如下:
hWnd= GetDlgItem(hWnd, IDC_TAB);
if (NULL == hWnd)
{
return FALSE;
}
// 定义一个二维数组 存放tab标签名字
char *tabname[3] = { "TAB1","TAB2","TAB3"};
//具体开始设置 tie的字段 Mask psztext,ccxtextmax,image,lparam
TCITEM tie;
tie.mask = TCIF_TEXT | TCIF_IMAGE;//psztext字段有效
tie.iImage = -1;
for (int i = 0; i < 3; i++)
{
tie.pszText = tabname[i];
TabCtrl_InsertItem(hWnd, i, &tie);
}
//////////////////////////////////////////////////////////////// 在tab标签中显示 别的控件
RECT rect;
GetClientRect(hWnd, &rect);
int nDialogResourceID[3] = { IDD_PAGE1,IDD_PAGE2,IDD_PAGE3 };
// 将两个窗口往 tab控件位置移动
for (int i = 0; i<3; i++)
{
g_page_hwnd[i] = CreateDialog(g_hInst, (LPCTSTR)nDialogResourceID[i], g_table_hwnd, DlgProc[i]);
MoveWindow(g_page_hwnd[i], rect.left+1,rect.top+22, rect.right - rect.left-3, rect.bottom - rect.top-22, FALSE);
}
ShowWindow(g_page_hwnd[0], SW_SHOW);