BOOL Create( CWnd* pParentWnd,
DWORD dwStyle = WS_CHILD ¦ WS_VISIBLE ¦ CBRS_TOP,
UINT nID = AFX_IDW_TOOLBAR
);
中,nID是工具条子窗口的ID,由于每个工具条的ID都不一样,为什么会有缺省值AFX_IDW_TOOLBAR?不是必须用户指定吗?如果我创建了几个工具条,岂不每个工具条的ID都一样了?(试过了,创建几个都可以), 请大哥尽快帮小弟一把!!!谢谢谢谢!
参数nID到底是指向什么?工具条的ID?MSDN说是“nID--The toolbar’s child-window ID.”,这该翻译成“工具条的子窗口的ID”吗?指工具条本身还是工具条的子窗口,如果是工具条的子窗口,那么谁是工具条的子窗口?还有,工具条内所有按钮图标是建立在一个位图上的,可是每个按钮也都有自己的ID啊,怎么会共有一个ID呢?不然怎么响应啊?我在Create()中随便用几个整数代替AFX_IDW_TOOLBAR,也完全一样,看不出有什么区别,
到底这个nID和工具条有啥关系?????
大哥,感激不尽!(我是菜鸟,呵呵)
DWORD dwStyle = WS_CHILD ¦ WS_VISIBLE ¦ CBRS_TOP,
UINT nID = AFX_IDW_TOOLBAR
);
中,nID是工具条子窗口的ID,由于每个工具条的ID都不一样,为什么会有缺省值AFX_IDW_TOOLBAR?不是必须用户指定吗?如果我创建了几个工具条,岂不每个工具条的ID都一样了?(试过了,创建几个都可以), 请大哥尽快帮小弟一把!!!谢谢谢谢!
参数nID到底是指向什么?工具条的ID?MSDN说是“nID--The toolbar’s child-window ID.”,这该翻译成“工具条的子窗口的ID”吗?指工具条本身还是工具条的子窗口,如果是工具条的子窗口,那么谁是工具条的子窗口?还有,工具条内所有按钮图标是建立在一个位图上的,可是每个按钮也都有自己的ID啊,怎么会共有一个ID呢?不然怎么响应啊?我在Create()中随便用几个整数代替AFX_IDW_TOOLBAR,也完全一样,看不出有什么区别,
到底这个nID和工具条有啥关系?????
大哥,感激不尽!(我是菜鸟,呵呵)
解决方案 »
- MFC 出租记录系统编译成功了,可以显示数据库内容,但查询总是出现错误
- 关于 CMAP 类 拷贝问题
- 和女朋友在一起半年了,她的生日快到了,我该送些或者做些什么让她能够感动的?
- 在C程序里如何使用内部MODEM进行通信?
- 我重载了WM_NCPAINT来画窗体边框和标题栏,可是菜单就不见了,如何给画出来?
- 莱鸟:请问对话框上的差号(关闭)发送什么消息?
- 怎样显示自己的窗体
- ActiveX 控件 编程问题
- VC高手请帮忙!
- 菜鸟的一个小问题
- 将Clistctrl的 header 删除重建之后,list 的下部无故出现滚动条,并且不能接受鼠标点击事件
- 文档视图结构,如何通过程序直接发送一个打印消息?
一个是在下面函数中设置风格:BOOL CToolBar::CreateEx(CWnd* pParentWnd, DWORD dwCtrlStyle, DWORD dwStyle, CRect rcBorders, UINT nID)
{
ASSERT_VALID(pParentWnd); // must have a parent
ASSERT (!((dwStyle & CBRS_SIZE_FIXED) && (dwStyle & CBRS_SIZE_DYNAMIC))); SetBorders(rcBorders); // save the style
m_dwStyle = (dwStyle & CBRS_ALL);
if (nID == AFX_IDW_TOOLBAR)
m_dwStyle |= CBRS_HIDE_INPLACE; dwStyle &= ~CBRS_ALL;
dwStyle |= CCS_NOPARENTALIGN|CCS_NOMOVEY|CCS_NODIVIDER|CCS_NORESIZE;
dwStyle |= dwCtrlStyle; // initialize common controls
VERIFY(AfxDeferRegisterClass(AFX_WNDCOMMCTL_BAR_REG));
_AfxGetComCtlVersion();
ASSERT(_afxComCtlVersion != -1);
_AfxGetDropDownWidth();
ASSERT(_afxDropDownWidth != -1); // create the HWND
CRect rect; rect.SetRectEmpty();
if (!CWnd::Create(TOOLBARCLASSNAME, NULL, dwStyle, rect, pParentWnd, nID))
return FALSE; // sync up the sizes
SetSizes(m_sizeButton, m_sizeImage); // Note: Parent must resize itself for control bar to be resized return TRUE;
}
另外一个则是在后面函数中映射为HMENUBOOL CWnd::CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName,
LPCTSTR lpszWindowName, DWORD dwStyle,
int x, int y, int nWidth, int nHeight,
HWND hWndParent, HMENU nIDorHMenu, LPVOID lpParam)
{
// allow modification of several common create parameters
CREATESTRUCT cs;
cs.dwExStyle = dwExStyle;
cs.lpszClass = lpszClassName;
cs.lpszName = lpszWindowName;
cs.style = dwStyle;
cs.x = x;
cs.y = y;
cs.cx = nWidth;
cs.cy = nHeight;
cs.hwndParent = hWndParent;
cs.hMenu = nIDorHMenu;
cs.hInstance = AfxGetInstanceHandle();
cs.lpCreateParams = lpParam; if (!PreCreateWindow(cs))
{
PostNcDestroy();
return FALSE;
} AfxHookWindowCreate(this);
HWND hWnd = ::CreateWindowEx(cs.dwExStyle, cs.lpszClass,
cs.lpszName, cs.style, cs.x, cs.y, cs.cx, cs.cy,
cs.hwndParent, cs.hMenu, cs.hInstance, cs.lpCreateParams);#ifdef _DEBUG
if (hWnd == NULL)
{
TRACE1("Warning: Window creation failed: GetLastError returns 0x%8.8X\n",
GetLastError());
}
#endif if (!AfxUnhookWindowCreate())
PostNcDestroy(); // cleanup if CreateWindowEx fails too soon if (hWnd == NULL)
return FALSE;
ASSERT(hWnd == m_hWnd); // should have been set in send msg hook
return TRUE;
}
因此MSDN在这个问题上描述的并不准确,也许VC6根本没有怎么真正使用这个ID。对于CToolBar,你还是只用那个缺省的id吧。
所谓子窗口的id,和你的控件Id无关,是用于一个父窗口管理自己的子窗口的。但是windows到底怎么使用这个子窗口id,我们就不知道了
BOOL CWnd::CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName,
LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect, CWnd* pParentWnd, UINT nID,
LPVOID lpParam /* = NULL */)
{
return CreateEx(dwExStyle, lpszClassName, lpszWindowName, dwStyle,
rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top,
pParentWnd->GetSafeHwnd(), (HMENU)nID, lpParam);
}