mfc

How to get Rect of Popup menu in mfc(with C++)?

爷,独闯天下 提交于 2020-02-07 00:06:30
问题 I developed button and popup menu like this. I want to process like this. When the mouse pointer is hovering Button A, show Popup Menu(1) and (2). 1-1) When the mouse pointer is hovering Popup Menu (1) or (2), show the popup menu continuous. When the mouse pointer is leaving from Button A to Popup Menu Area(in case - hovering B or C), close the popup menu. So I've wondered how to get Rect Area of Popup Menu and how to know mouse pointer hovering the Popup menu. Please send me some answer TT..

VS中的编码,多字节编码和unicode编码是什么意思

三世轮回 提交于 2020-02-06 19:53:52
我们发现编写C++代码时这里的字符集的修改好像没有什么作用,没错C++的实现是有具体的标准的,不是微软可以改变的,那么这里的字符集有什么用呢? 其实这里是指调用windowsSDK时使用的字符集,意思是你调用windowsAPI的时候如果需要用到字符串是必须使用unicode编码,而我们C++中字符串的编码是ANSI,通俗的讲中国就是GB2312。 这里可以配置windowsSDK的版本 在说以下MFC,刚开始一直以为MFC使用用来做界面的,其实这样的理解是错误的,MFC其实是使用windowsSDK封装的一些类库,可以很方便的使用。 来源: CSDN 作者: 一只小黑 链接: https://blog.csdn.net/qq_28437139/article/details/104199308

Change char inserted using Alt+Unicode in CRichEdit

心已入冬 提交于 2020-02-06 03:30:31
问题 I want to change a unicode char inserted using Alt+Unicode code from the keyboard. I used PretranslateMessage for changing the chars inserted directly from the keyboard and it worked. But with the Alt+Unicode code method it does not. Here is the code: Microsoft Word has this functionality when enabling show/hide paragraph marks. BOOL CEmphasizeEdit::PreTranslateMessage(MSG* msg) { if (msg->hwnd == m_hWnd) { if (msg->message == WM_CHAR) { if (TheApp.Options.m_bShowWSpaceChars) { if (msg-

VC/MFC如何设置对话框背景颜色

六眼飞鱼酱① 提交于 2020-02-05 15:03:12
方法一:调用CWinApp类的成员函数SetDialogBkColor来实现。 (这个函数已经废弃) void SetDialogBkColor(COLORREF clrCtlBk = RGB(192, 192, 192), COLORREF clrCtlText = RGB(0, 0, 0)); 其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。 在InitInstance()中添加如下代码: SetDialogBkColor(RGB(0,0,255),RGB(255,0,0)); 值得注意的是:在调用DoModal()之前必须先调用SetDialogBkColor。 这种方法经过笔者验证,并不能改变对话框背景 方法二:重载OnPaint(),即WM_PAINT消息 CRect rect; CPaintDC dc(this); GetClientRect(rect); dc.FillSolidRect(rect,RGB(0,255,0)); //设置为绿色背景 方法三:重载OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor),即WM_CTLCOLOR消息 .h头文件添加 CBrush m_brush; .cpp源文件添加 m_brush.CreateSolidBrush(RGB(255,0,0)); OnCtlColor

MFC改变控件颜色

≡放荡痞女 提交于 2020-02-05 14:56:53
from http://www.cppblog.com/FandyM/archive/2010/07/21/120972.aspx MFC应用程序中,要改变控件的背景色可通过重载OnCtlColor()函数来实现。方法是在该函数中设置所需颜色后再返回一个画刷句柄便可 重绘控件背景色。OnCtlColor()函数对于控件背景色的处理是通过捕捉相应的控件消息来实现的。 常用的此类消息有: CTLCOLOR_DLG 对话框 CTLCOLOR_EDIT 编辑框 CTLCOLOR_LISTBOX 列表框 CTLCOLOR_MSGBOX 消息框 CTLCOLOR_SCROLLBAR 滑动条 CTLCOLOR_STATIC 静态文本框、矩形等。 主要有三步: 1. 声明消息响应函数 //{{AFX_MSG(CMyDialog) afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); …… //}}AFX_MSG DECLARE_MESSAGE_MAP() 2. 实现消息响应函数 以编辑框举例: HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd,

MFC消息机制

断了今生、忘了曾经 提交于 2020-02-05 14:17:00
何谓消息、消息处理函数、消息映射? 消息简单的说就是指通过输入设备向程序发出指令要执行某个操作。具体的某个操作是你的一系列代码。称为消息处理函数。 在SDK中消息其实非常容易理解,当窗口建立后便会有一个函数(窗口处理函数)开始执行一个消息循环,我们还可以清楚的看到消息处理的脉络。一个switch case语句就可以搞定,消息循环直到遇到WM_QUIT消息才会结束,其余的消息均被拦截后调用相应的处理函数。 但在封装了API的MFC中,消息似乎变的有些复杂了,我们看不到熟悉的switch case语句了,取而代之的是一个叫消息映射的东西。为什么MFC要引入消息映射机制,你可以想象一下,在现在的程序开发活动中,你的一个程序是否拥有多个窗体,主窗口就算只有一个,那菜单、工具条、控件这些都是子窗口,那我们需要写多少个switch case,并且还要为每个消息分配一个消息处理函数,这样做是多么的复杂呀。因此MFC采用了一种新的机制。利用一个数组,将窗口消息和相对应的消息处理函数进行映射,你可以理解成这是一个表。这种机制就是消息映射。这张表在窗口基类CWnd定义,派生类的消息映射表如果你没有动作它是空的,也就是说如果你不手工的增加消息处理函数,则当派生窗口接受一个消息时会执行父类的消息处理函数。这样做显然是高效的。 MFC提供的消息结构 同时MFC定义了下面的两个主要结构: AFX_MSGMAP

MFC开发中添加自定义消息和消息响应函数

孤街浪徒 提交于 2020-02-05 14:07:09
( 1 )在 .h 或 .cpp 文件定义一个消息 #define CLICK_MESSAGE_BOX WM_USER+1001    //add by 20180612 给主窗口ctrl.cpp发送消息   //自定义消息   #define WM_PENSIGNMSG WM_USER+1001 ( 2 )在 .h 中类定义里添加消息映射 DECLARE_MESSAGE_MAP()    //类的定义    class CamPenSignerCtrl : public COleControl   {      // 消息映射      DECLARE_MESSAGE_MAP()   } ( 3 )在 .h 中类定义里添加宏里面添加消息处理函数声明    //类的定义    class CamPenSignerCtrl : public COleControl   {      //add by 20180612 给主窗口ctrl.cpp发送消息     //定义消息处理函数    afx_msg LRESULT OnPensignMsgHandler(WPARAM wParam, LPARAM lParam);   } ( 4 ) cpp 文件里链接消息和消息映射函数    BEGIN_MESSAGE_MAP(CamPenSignerCtrl, COleControl)    

调用MFC建立窗口进行绘制的极简版(for greenhands)——单文件

筅森魡賤 提交于 2020-02-05 11:48:45
代码如下,有注解。 调试相关,需要自行链接MFC库,引用一下【设置】【连接器】里的对象库模块 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib 同时需要注意,在工程选项中,将/subsystem:console改成/subsystem:windows 在微软编译器下,可以跑通。很有爱的简洁版,出自《opengl编程精粹》 #include <windows.h> static LPCTSTR lpszAppName = "GDI App"; HBRUSH hBlueBrush, hRedBrush; LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); int

Overlapped WSARecv() Callback Not Being Called in MFC App

那年仲夏 提交于 2020-02-05 06:35:46
问题 I have a COM component, implemented in C++ with ATL, that uses overlapped socket I/O. Right after the connection is made to the server, it starts an overlapped read on the socket, with code like this: // Pass pointer to this instance as hEvent parameter, for use by callback m_recvOverlapped.hEvent = reinterpret_cast<HANDLE>(this); int rc = ::WSARecv(m_s, &wsabuf, 1, &m_recvNumberOfBytes, &m_recvFlags, &m_recvOverlapped, RecvCallback); if (rc == SOCKET_ERROR) { // If error is WSA_IO_PENDING,

Menu Command Update Handlers in Dialog Boxes

随声附和 提交于 2020-02-05 04:42:07
问题 I have a dialog-based MFC application. My dialog box has a menu and I'm using the technique described here to enable menu accelerators in the dialog box. This works fine but I can't seem to find any way to implement menu command update handlers. Or, rather, I've implemented update handlers but can't seem to find a good way to get MFC to call them. Searching the web, I've found functions like UpdateDialogControls() to implement command update handlers for dialog child controls. But I want to