最近试试Prof-UIS界面库(www.prof-uis.com)的用法,其帮助感觉不是很好。结合其Samples,把一些学习笔记记录如下。
先说一下Prof-UIS。在运行其Samples或者将这个界面库用到其它Project中之前,需要编译ProfUISDLL(对于静态库ProfUISLIB),但是运行某些Samples,比如Skinable,提示说需要用到ProfSkinDll,于是先编译它,但是又需要libPNGDLLCRT-d.lib,=>先编译LibPNG(编译时选择LibPNG-Win32 Used LIBs Debug(DLL CRT))
比如要编译Skinable,整个过程:(好像编译后运行出错,why?)
1.先编译ZLib和LibPNG (这里选择Build->Set Active Project Configuration中为Debug,DLL的。注意,这样编译生成的文件是ZLibDLLCRT-d.lib和LibPNGDLLCRT-d.lib。如果选择其他,生成的文件名是对应的。)
2.然后编译ProfSkinDll (对应上面的,选择Win32 MBCS Debug)
3.现在可以编译Skinable了。
(编译是注意设置好是Debug,还是Realse,是static还是非,是MBCS还是ANSI或其他,注意看看Set Active Project Configuration就知道了。)
将已有的MFC程序移至到基于Prof-UIS(以SDI程序为例)。
1.在VC6中建SDItesst的SDI项目。
这里简单说明怎样将其自动生成的
CToolBar m_wndToolBar; 改为基于Prof-UIS的CExtToolControlBar m_wndToolBar;
(1). 在StdAfx.h中增加 #include <Prof-UIS.h>,当然VC环境中include,lib,src等目录先设置好。
(2). 将CToolBar->CExtToolControlBar
(3). 在CMainFrame::OnCreate()中修改代码如下:
修改一:
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
改为:
if( !m_wndToolBar.Create(
_T( "Toolbar name" ),
this,
AFX_IDW_TOOLBAR
)
|| !m_wndToolBar.LoadToolBar( IDR_MAINFRAME )
)
修改二:
EnableDocking(CBRS_ALIGN_ANY);
改为:
if( !CExtControlBar::FrameEnableDocking(this) )
{
ASSERT( FALSE );
return -1;
}
运行如图1,ToolBar虽然可以拖动,可是图标怎么看不见?
后来看其Samples。需要在InitInstance()函数中增加如下代码:
VERIFY(
g_CmdManager->ProfileSetup(
__PROF_UIS_PROJECT_CMD_PROFILE_NAME
)
);
AfxEnableControlContainer();
……
当然需要定义如下的宏:
#define __PROF_UIS_PROJECT_CMD_PROFILE_NAME _T("ProfSDI-command")
#define __PROF_UIS_PROJECT_DLG_PERSIST_REG_KEY _T("ProfSDI-resizable-dialog ")
然后在OnCreate中增加:
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
……
VERIFY(
g_CmdManager->ProfileWndAdd(
__PROF_UIS_PROJECT_CMD_PROFILE_NAME,
GetSafeHwnd()
)
);
VERIFY(
g_CmdManager->UpdateFromMenu(
__PROF_UIS_PROJECT_CMD_PROFILE_NAME,
IDR_MAINFRAME
)
);(这一部分好像也不需要)
运行如图2。
如何使得此ToolBar具有不同的风格呢?
需要在InitInstance()中增加其他的代码:
g_PaintManager.InstallPaintManager(
RUNTIME_CLASS(CExtPaintManagerOffice2007_R2_Obsidian)
);
AfxEnableControlContainer();
……
运行如图3。
并将状态条和菜单也改了。见图4。