在SDI程序中用LockWindowUpdate()锁定屏幕,因为工具栏是用CreateExToolBar()创建的,
没有用VC自带的工具栏,也不是在它上面改的,所以工具栏也被锁定了。
测试发现如果是VC自带的工具栏是不会被锁定的。
哪位高手帮忙解决一下!!!!!!!!!!!!!!!不让它锁定工具栏呀!!!!!!!!!!!!!!!!!!!创建工具栏的代码BOOL CMainFrame::CreateExToolBar()
{
CImageList img;
CString str;

if(!m_wndReBar.Create(this))
{
return -1;
} if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC))
{
return -1;      
} //下面的代码是设置按钮的宽度和长度
m_wndToolBar.GetToolBarCtrl().SetButtonWidth(60, 60); /**********************************
下面的代码是设置"热"的位图
设置位图时要保证图片尺寸不得小于设定的大小(50,50),否则位图不显示
***********************************/
img.Create(50, 50, ILC_COLOR24|ILC_MASK,2,2);
img.SetBkColor(::GetSysColor(COLOR_BTNFACE)); // 连接站点
CBitmap bm1;
bm1.LoadBitmap(IDB_BARLINKON_2);
img.Add(&bm1, RGB(0, 0, 0));
        
        ........................ m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img);
img.Detach();

/**********************************
下面的代码是设置"冷"的位图
设置位图时要保证图片尺寸不得小于设定的大小(50,50),否则位图不显示
***********************************/
img.Create(50, 50, ILC_COLOR24|ILC_MASK, 2, 2);
img.SetBkColor(::GetSysColor(COLOR_BTNFACE)); // 连接站点
CBitmap bm21;
bm21.LoadBitmap(IDB_BARLINKON);
img.Add(&bm21, RGB(0, 0, 0));        ........................ m_wndToolBar.GetToolBarCtrl().SetImageList(&img);
img.Detach(); /**************************************
下面的代码是设置"不可用"的位图
设置位图时要保证图片尺寸不得小于设定的大小(50,50),否则位图不显示
**************************************/
img.Create(50, 50, ILC_COLOR24|ILC_MASK, 2, 2);
img.SetBkColor(::GetSysColor(COLOR_BTNFACE)); // 连接站点
CBitmap bm41;
bm41.LoadBitmap(IDB_BARLINKON4);
img.Add(&bm41, RGB(0, 0, 0));        ........................ m_wndToolBar.GetToolBarCtrl().SetDisabledImageList(&img);
img.Detach();

//改变属性
m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT | CBRS_TOOLTIPS | TBSTYLE_TRANSPARENT);
m_wndToolBar.SetButtons(NULL, 13); /*******************************************
set up each toolbar button设置文字  
*******************************************/
m_wndToolBar.SetButtonInfo(0, ID_PATH_CONNECT, TBSTYLE_BUTTON, 0);
m_wndToolBar.SetButtonText(0, "连接站点");

        ........................ CRect rectToolBar;
//得到按钮的大小
m_wndToolBar.GetItemRect(0, &rectToolBar);
//设置按钮的大小
m_wndToolBar.SetSizes(rectToolBar.Size(), CSize(50,44));

//在Rebar中加入ToolBar
m_wndReBar.AddBar(&m_wndToolBar);

//改变一些属性
REBARBANDINFO rbbi;
rbbi.cbSize = sizeof(rbbi); //这个是必须填
rbbi.fMask = RBBIM_CHILDSIZE | RBBIM_IDEALSIZE | RBBIM_SIZE | RBBIM_BACKGROUND;
//工具条的宽度
rbbi.cxMinChild = rectToolBar.Width();
// rbbi.cxMinChild = 80;
//高度
rbbi.cyMinChild = rectToolBar.Height();
// rbbi.cyMinChild = 65;
//下面这行代码是为工具条加入背景位图,请注意上rbbi.fMask中RBBIM_BACKGROUND标志
rbbi.hbmBack = LoadBitmap(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BG_G));

rbbi.cx = rbbi.cxIdeal = rectToolBar.Width() * 13;
// rbbi.cx = rbbi.cxIdeal = 50 * 10;
m_wndReBar.GetReBarCtrl().SetBandInfo(0, &rbbi); return TRUE;
}

解决方案 »

  1.   

    在哪个类中调用的LockWindowUpdate?如果在框架类中,工具栏就会被锁定,如果在视图类中,就不会锁工具栏。
      

  2.   

    在框架类中菜单的响应函数中调用的LockWindowUpdate。
    我试了一下,在视图类中,的确不会锁定工具栏,但我还有4个停靠窗口,也没被锁定。
    如果是在框架类中调用LockWindowUpdate,停靠窗口也会被锁定。
      

  3.   

    LockWindowUpdate锁定的是一个窗口(及其子窗口),工具栏和其它停靠窗口都是框架的子窗口,不能单独排除。
    你的目的是要实现什么?也许应该用EnableWindow逐个禁用子窗口。
      

  4.   

    屏幕锁定可以用hook啊,自己留个后门就行
      

  5.   

    好像只能用EnableWindow了,还有更好的方法吗?