问题标签 [cview]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
visual-c++ - SendMessage/PostMessage 到派生的 CView 类不适用于 MFC 应用程序
我正在为基于 MFC 的旧应用程序(MFC-app)构建一个测试应用程序(testApp)。我正在尝试使用它们之间的消息传递来模拟 MFC 应用程序上的鼠标单击。我能够成功地从 MFC 应用程序菜单中调出对话框。但是,当我尝试在 MFC 应用程序的视图上模拟鼠标单击时,它似乎不起作用。
我的主要问题是在尝试使用 SendMessage,PostMessage 函数与 CView 的派生类进行通信时是否存在任何已知限制?另请注意,我正在重用 ON_COMMAND() 处理程序来处理我的消息,因为目标是通过我的 TestApp 执行通过菜单选项单击调用的相同处理程序。有关我尝试的内容和遇到的错误的更多详细信息:
尝试1。
测试应用:
::SendMessage 到 MFC 应用程序的 CMainFrame 要求它以所需的输入调出 CView。----> 这行得通
MFC应用程序:
CMainFrame:使用此处描述的方法检索 CView (CDesignView) 的派生类及其 HWND 句柄的 ptr:https: //support.microsoft.com/en-us/kb/108587 使用的代码粘贴如下:
-------------------> 此时代码中 view_hWnd 和 designView 的值都不是 NULL。但是,当我将这些用于 SendMessage 时,它会失败:
designView->PostMessageW(ID_DESIGN_xxx,NULL, NULL) ;
--> 这不起作用,即应用程序没有变化,就好像从未发送过消息一样。ID_DESIGN_xxx 处理程序永远不会被调用。该处理程序在 CDesignView 消息映射中声明如下:
ON_COMMAND(ID_DESIGN_xxx , OnXXX)
(注意:我正在重新使用 MFCApp 已经用于 CDesignView 上与此功能对应的菜单选项的处理程序,因为目标是对其进行测试)
-------------------->当我将其替换为直接调用处理程序时,如下所示:
设计视图->OnStarOrder() ;
然而,这不是我想要的行为,因为它涉及将太多 View 处理程序公开,并且也违背了密切模拟实际使用模型的测试应用程序的目的。
------------------->为了进一步调试,我还尝试调用本机 WM_xxx 消息,如下所示。
designView->PostMessageW(WM_CLOSE,NULL, NULL) ;
这在此检查中给出了异常失败: IsKindOf( RUNTIME_CLASS(CView) 断言失败。
尝试 2
我还尝试让 TestApp 将消息发送到 MFCApp CDesignView 而不是它自己的 MainFrame 如上所述。因此,我使用 ON_COPY 消息将上述代码中的 CDerivedView 句柄 view_hWnd 传递给了 TestApp。然后 TestApp 执行 ::SendMessage(view_hWnd,WM_CLOSE,NULL, NULL)。得到了同样的错误。这种方法试图排除在发送消息时 CDesignView 不是活动窗口的可能性。在这种情况下,我在让 TestApp 发送消息之前手动单击 MFCApp 的 CView。
这些似乎都不起作用。您可以提供的任何建议都将大有帮助。提前致谢!
mfc - 没有将焦点放在 CView 的窗口子项上
我创建了一个简单的 MFC MDI 应用程序。然后我创建了一个 DLL,它实现了一个简单的窗口(继承自CWnd
)。我希望它CView
在我的应用程序中成为窗口的孩子。因此,当应用程序启动并创建视图时,我创建了我的窗口,并将句柄CView
作为父级传递。
除了鼠标滚轮问题外,它工作正常:焦点在CView
窗口上(尽管我的窗口覆盖了整个客户区),因此我的窗口不接收WM_MOUSEWHEEL
消息。
SetFocus()
创建后没有帮助。
除了子类化/挂钩父级来修复它之外,还有什么正确的方法吗?我希望它在 DLL 中完成。
PS 我的窗口用于 OpenGL 渲染,我希望它尽可能自给自足。
visual-c++ - CView就地编辑控件布局
我有一个CView
用作垂直堆叠的几个 Ctrl 的占位符,以便占据所有可用空间。我想做的是用鼠标抓住一个水平边界并将其向上或向下拖动以调整 Ctrl 高度。
问题是子 Ctrl 的CView
拦截鼠标消息而不是CView
父窗口(WM_LBUTTONDOWN
等WM_MOUSEMOVE
)。Ctrl 还为不相关的编辑要求处理这些消息。
任何人都能够提供建议或提供有关此尺寸/编辑要求的可能解决方案的参考吗?这种情况有点类似于 Visual Studio 中的资源编辑器。只有我希望在现场环境中进行编辑。
c++ - how to show the print preview category?
Well I am working with visual studio 2015 on an mfc project. I have enabled the office like ribbon in the project creation wizard. I am inheriting from CView for my view class to get printing support as documentation suggests. I have also overrided OnDraw too. Now I want to get a print preview of the document with the print preview options on the ribbon. I don't know where to start or how to act. Any suggestions, propositions or examples ? Thanks in advance.
c++ - C++无法在对话框CFormView中显示ActiveX控件,控件变量为NULL
我在我的项目(Visual Studio 2015、MFC、C++)中使用了SmartGraph ActiveX 控件。它已成功注册。我尝试将带有此控件的对话框放入 CFormView
MyAppView.h:
MyAppView.cpp:
因此 m_Graph 为 NULL 并且 SmartGraph 不会显示在对话框中。同时 OK 按钮变量不是 NULL 并且显示正确。我做错了什么?
mfc - 如何处理从视图类发送到对话框的消息?
我有手视图、文档和大型机的 SDI 应用程序。在视图类中,我有打开另一个对话框的按钮,比如说租船对话框。我想打开该对话框并从视图发送初始值以在对话框中分配一些变量,但我无法在对话框类中捕获消息事件。下面作为我的代码:
在租船对话框中,我处理如下消息
租船功能
我在 OnSetShowTemp() 函数处设置了断点,但它不能跳到那里。任何想法将不胜感激。
c++ - 最大化子窗口时系统菜单消失
有人遇到过这个问题吗?
我在 MDI 应用程序上使用 MFC。我使用 SetMenu() 在菜单之间切换,但是当我最大化子窗口时,系统菜单(最大化、最小化、关闭按钮)的副作用会消失。
如果我不调用 SetMenu(),则问题不会发生。
c++ - MFC:通过对话框与视图通信
我希望我的 Dialog 在 OK 响应之外与我现有的视图进行通信(因此使用 apply 或类似的)。我认为消息是最好的方法。
我敢肯定这些天没有很多MFC问题,所以我希望有人能够提供帮助。
通过向导创建一个新项目,我添加了一个由视图生成的对话框(比如说一个 CPropertySheet)。
起初,我假设当我单击“应用”时,我可以向视图发送消息并让它做一些事情(因为它是在视图中生成的);但是,我不能将消息直接传递给视图。
从我使用的对话框中:
我可以在 MainFrm(一个 CmainFrame)中捕获消息,它将启动指定的 Button1() 函数,但我无法使用相同的代码(如下)在视图中捕获消息。
这是有道理的,因为我猜 View 是 MainFrm 的子级,而 Dialog 属于 MainFrm,而不是 View。
Jeff Prosise 的My Programming Windows with MFC(第 2 版)使用自定义 OnCreate 通过手动创建来获取对 View 的引用,但我真的不想这样做,因为它看起来相当复杂。我相信我最终会以这种方式制造很多问题。默认的 OnCreate 似乎对我的视图没有明显的参考(例如,包括在内,但可以随意跳过)。
我认为必须有一种方法可以从 MainFrm 获取我的视图。
我试过了:
但这是返回 NULL (所以我不能用它来发送消息)。
我什至不确定我是否需要这个,但我对为什么这不起作用以及为什么我无法从 MainFrm 处理我的视图感兴趣。
mfc - MFC:如何在 CTabView 中获取选项卡的 CView*?
我有一个CTabView
并添加一个标签,例如AddView(RUNTIME_CLASS(CMyView1), _T("View1"));
. 但是如何获得指向CMyView1
在选项卡中创建的已创建类的指针?
蒂亚!!