感觉这三个接口很少看到,所以就整理了下
1.功能介绍
网站来源:http://blog.youkuaiyun.com/ly131420/article/details/8865845
在windows界面设计中,我们和窗口的接触比较多,但是这三个api接口却很少用到,即:SetProp、GetProp、RemoveProp这三个API接口,实际上这三个API接口是和窗口句柄关联起来的,这个非常重要,因为他们可以给窗口设置添加、删除新属性,这就扩展了窗口的关联数据,使得我们可以把任何数据关联到窗口上,在设计一些界面架构上则可以用到这些接口,直接把窗口句柄和对象关联起来,把对窗口过程的处理转换成了对象事件的处理,对面向对象的变成更加的符合逻辑性,在Delphi的框架VCL框架上就是采用了这种方法,使得Delphi在界面开发上非常的高效,当然性能上要比MFC低,但是MFC牺牲了更加合理的事件处理方式,更多的都是在窗口过程中处理事件,使得MFC设计界面相对困难些了。
2.用法介绍
2.1 SetProp()
2.2GetProp()
2.3 RemoveProp()
3.代码示例
可以使用GetProp和SetProp函数来查找已经启动的程序的窗口。
使用SetProp向窗口的属性表中添加字符串。可以在对话框的OnInitDialog函数的最后添加下面语句。
::SetProp( this->m_hWnd, "字符串", (HANDLE)1 );
使用GetProp在窗口的属性表中查找字符串。
::GetProp(hwnd, "字符串")
BOOL CAutoRunApp::ensureOneInstance()
{
m_hMutex = CreateMutex( NULL, FALSE, _T( "AutoRun" ) );
if ( m_hMutex )
{
if ( GetLastError() == 183 /*ERROR_ALREADY_EXISTS*/ )
{
CloseHandle( m_hMutex );
HWND hWndPrevious = ::GetWindow( ::GetDesktopWindow(), GW_CHILD );
while(::IsWindow(hWndPrevious))
{
if (::GetProp(hWndPrevious, EXEPROP))
{
if (::IsIconic(hWndPrevious))
{
::ShowWindow(hWndPrevious, SW_RESTORE);
::SetForegroundWindow(hWndPrevious);
}
else
{
::SetForegroundWindow(::GetLastActivePopup(hWndPrevious));
}
return FALSE;
}
hWndPrevious = ::GetWindow( hWndPrevious, GW_HWNDNEXT );
}
return FALSE;
}
}
return TRUE;
}
4.其他介绍
也可以查看我的文章中的 ”CListCtrl实现排序功能“里面也有用到SetProp和GetProp
版权声明:本文为博主原创文章,未经博主允许不得转载。