我用这一行初步了解我的MFC应用程序的视图:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>jQuery UI Draggable - Default functionality</title>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="/resources/demos/style.css">
<style>
#parent {
position: absolute;top:0px;left:0px; width: 1280px; height: 720px;
background-color:red;
}
#rect1 { width: 150px; height: 150px; padding: 0.5em; }
.circleBase {
border-radius: 50%;
behavior: url(PIE.htc); /* remove if you don't care about IE8 */
}
.type1 {
width: 100px;
height: 100px;
background: yellow;
border: 3px solid red;
}
</style>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script>
//
// !!!IMPORTANT!!! GOAL
// ============================= ******
// Get the coords after dragging and store the last value here
// ============================= ******
//
var rect_coords = "";
var circle_coords = "";
$(function(){
$( "#rect1" ).draggable({ containment: "parent" });
$( "#circle1" ).draggable({ containment: "parent" });
});
</script>
</head>
<body>
<div id="parent">
<div id="rect1" class="ui-widget-content">
<p>Rect</p>
</div>
<div id="circle1" class="ui-widget-content circleBase type1">
<p>Circle</p>
</div>
</div>
</body>
</html>
IDR_MAINFRAME是我的主菜单的标识符。 使此菜单自定义绘制的最佳方法是什么?我已经有了一个来自CMenu的课程,它为上下文菜单做了很好的工作。不同之处在于我自己创建了上下文菜单,而这个菜单是由框架创建的。
为了覆盖主菜单,我尝试了:
CSingleDocTemplate pDocTemplate(
new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CMyDoc),
RUNTIME_CLASS(CMainFrame),
RUNTIME_CLASS(CMyDataView)
)
);
AddDocTemplate(pDocTemplate);
,但不知何故,对于第一个项目(即POPUP),MeasureItem不会在customMenu类实例化中触发,导致点击一个小方块,并且不同按钮的文本相互重叠。
MENUITEM按预期显示,但对于每个POPUP到子菜单(以及子子和子子菜单),样式错误(读取:不调用MeasureItem)。对于sub,subsub和subsubsubmenus中的MENUITEMS,我从框架接收一个MeasureItem调用。
答案 0 :(得分:0)
感谢您的评论。事实证明我的CMenu派生类中有一个错误。我使用了codeguru中的代码示例。
在那里,ModifyMenu为POPUP菜单发送ID 0,而不是POPUP菜单的真实ID。 void CWnd::OnMeasureItem(...)
搜索要测量的菜单,但没有找到任何内容(它查找0,因为ModifyMenu告诉他这样做,但实际的POPUP菜单有一些其他ID)并返回NULL。如果您的菜单中有一个SEPARATOR,它会找到一个要测量的菜单,因为分隔符的ID为0.
解决方案如下:
reinterpret_cast<UINT>(menu.GetSubMenu(i)->GetSafeHmenu())
作为ID(wincore.cpp中的AFX_STATIC CMenu* AFXAPI _AfxFindPopupMenuFromID(CMenu* pMenu, UINT nID)
检查ID的方式相同)。