基于Windows 7中的 Ribbon开发技术应用( 二 )


为了避免上述所有的问题,把这些接口包装到类库 。一个RIBBON类,并且你使用如下:
RIBBON(HWND hh = 0);~RIBBON();bool Initialize();
Ribbon初始化成功返回Ture
bool LoadMarkup(HINSTANCE hInst,LPCWSTR resourceName);
Ribbon初始化成功返回Turebool LoadMarkup(HINSTANCE hInst,LPCWSTR resourceName);
从资源里加载ribbon,如果现有的ribbon被加载,则释放它 。void DestroyMarkup();销毁加载的ribbon 。int& DesiredHeight();
返回理想高度ribbonvoid SetHeight(int);允许设置ribbon高度
调用类库向父窗口发送一个预定义的MESSAGE_RIBBON (const int MESSAGE_RIBBON = RegisterWindowMessage(L"{E733E4DA-904C-486b-B5FB-6201773D69DE}");),与 WPARAM设置为RIBBON *类,和LPARAM设置为RIBBON_MESSAGE结构:
struct RIBBON_MESSAGE{ IUIFramework * u_f; 
// Pointer to the IUIFramework of the ribbon UINT32 cmd; 
// Command IDUINT32 reason; 
 // Reason code (When View is changed) UI_COMMANDTYPE type; 
 // Type of the command UI_VIEWTYPE vtype; 
 // Verb Type of the view change (When View is changed) UI_VIEWVERB vverb 
; // Verb of the view change (When View is changed) UI_EXECUTIONVERB verb; 
 // Verb of the command const PROPERTYKEY* key; 
// Contains the new value const PROPVARIANT* cv; 
 // Contains the current value IUISimplePropertySet* pset; 
// Contains an interface which you can set/query values void* view; 
// Contains an IUnknown* of the view interface 
// (when view is changed) which you 
// can use to query for an IUIRibbon. bool update; 
// true if view is changed. };
因此,如果您只是想重定向消息到WM_COMMAND ,您检查update ==false,erb== UI_EXECUTIONVERB_EXECUTE ,和type == UI_COMMANDTYPE_ACTION。
LRESULT CALLBACK Main_DP(HWND hh,UINT mm,WPARAM ww,LPARAM ll) 
 { 
 if (mm == MESSAGE_RIBBON) 
 { 
RIBBON_MESSAGE* rm = (RIBBON_MESSAGE*)ll; 
if (!rm) 
if (rm->update == false && rm->verb == UI_EXECUTIONVERB_EXECUTE 
 && rm->type == UI_COMMANDTYPE_ACTION) 
SendMessage(hh,WM_COMMAND,rm->cmd,0); 
} 
 }
分析Ribbon的XML数据格式由于ribbon本质上是一个代表性的一个XML地图,在这里您将实际花费大部分的时间来制定一个好的和工作ribbon. 。
ribbon 基本要素:一套命令,每个人可以有一个ID,一个符号,一个标签,一个提示,和一套图像 。您定义这些命令为"按钮"和其他因素,如标签或一组标签 。一套要素,包括一个"应用程序的菜单" ,一个"快速访问工具栏"和"ribbon" ,其中载有一些标签 。每个标签可以有一些组,每个组都可以有一些预定义的控制 。
这些组都必须标明具体的"大小"和布局;所以举例来说,如果你想说, 6组内的按钮,你只有三种预定义的方式,安排他们 。这里是一组实例命令:
 LabelTitle="New " Symbol="cmdNew" 
 Comment="New" 
 Id="22001" 
 TooltipTitle="Tooltip Title" 
 TooltipDescription="Tooltip Text"> 
  
1-32a.bmp 
 
 
 
1-32a.bmp 
 
 
 
 

推荐阅读