HGLOBAL hgMem = GlobalAlloc(0,sizeof(xxxx))//分配全局内存资源
void *p = (void *)GlobalLock(hgMem)
// *** 作…迹腊…
//这时hgMem所表示的内存资源将不可被其他进程所访问
GlobalUnlock(hgMem)//解除锁定
//接下来其他进程可以访问该内存资源。胡陪
实现互斥资源访问,还可以利用CreateMutex,EnterCriticalSection,一般用于多线程中。
我所知道的就这么姿做滑多。同步的问题,我也不了解。
概述
Radio Button通常成组晌斗凯使用,组内是互斥的。
如何设置分组
(1)Ctrl+D
(2)依次点击Radio Button完成Tab键顺序设置
(3)将一组内首个Radio Button的Group属性设置成TRUE,其他为FALSE。 系统每检测到一个Group属性为TRUE的Radio Button,都会认为是一个新分组。
*** 作
在OnInitDialog()中设置RadioButton的初始选中状态,只需将每组选中的Radio Button进行设置,组销侍内其余的Radio Button是互斥不选中的。
((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE)//选上
通过Radio Button点击事宴唤件来设置新Radio Button状态,依然是只 *** 作组内被选中的Radio Button即可。
练习项目:在窗口的客户区用鼠标左键点两下,以这两点为源点画椭圆或矩形弯笑。鼠标右键即时d出菜单实现图形的选择(椭圆或矩形)工具条实现颜色的选择。问题:考虑到按了某工具条按钮后再按此按钮就没有意义,所以要灰化所按埋衫含的按钮,同时又要启用以前灰化的按钮。如果不灰化当前所按的按钮,程序正常,但在实现互斥时出了问题。部分源代码如下:
void CDrawRectView::OnCommandRangeColor(UINT nID)
{
// TODO: Add your command handler code here
switch(nID)
{
case ID_BLACK:
m_rgb=RGB(0,0,0)
break
case ID_RED:
m_rgb=RGB(255,0,0)
break
case ID_GREEN:
m_rgb=RGB(0,255,0)
break
case ID_BLUE:
m_rgb=RGB(0,0,255)
break
}
SetToolBarCtrlState(nID)
}
void CDrawRectView::SetToolBarCtrlState(UINT nID)
{
int ControlBarNumber
//获得工具条指针
CToolBar* pToolBar=(CToolBar*)(GetParentFrame()->GetControlBar(IDR_MAINFRAME))
//获得工具条控制指针
CToolBarCtrl* pToolBarCtrl=&(pToolBar->GetToolBarCtrl())
//获得工具条控件数目
ControlBarNumber=pToolBarCtrl->GetButtonCount()
for(UINT ii=ID_BLACKii<ID_BLUEii++)
{
TBBUTTONINFO* ptbbi
pToolBarCtrl->GetButtonInfo(ii,ptbbi)
if(ptbbi->fsState!=TBSTATE_ENABLED)
{
pToolBarCtrl->EnableButton(nID,false)
pToolBarCtrl->EnableButton(ii,true)
return
}
}
return
}
问题说塌悔明:在自定义函数SetToolBarCtrlState中调用GetButtonCount是多余的,但问题正出在他身上。注释掉GetButtonCount后,GetButtonInfo又出了问题.问题的说明都是:
Unhandled exception in DrawRect.exe (MFC42D.DLL):0xC0000005:Access Violation
编译能通过,但运行时出错。
本程序是用VC++6.0在Win XP下编译.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)