关于消息的问题,请大家进来帮帮忙!!!

hansa 2006-08-25 10:47:07
大家好:

在继承CEdit控件写了一个自义消息(userMesage),当KeyUp响应时就发送userMessage消息。
但,需要把该控件用在对话框中,怎样才能把userMessage消息在对话框也能使用(消息在外部可见)?请多多指教,在线急等!!

...全文
153 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
hansa 2006-08-25
  • 打赏
  • 举报
回复
zhihong123 2006-08-25
  • 打赏
  • 举报
回复
消息隐射?
我QQ:158208630
hansa 2006-08-25
  • 打赏
  • 举报
回复
zhihong123能不能交个朋友啊,
QQ:516681534
hansa 2006-08-25
  • 打赏
  • 举报
回复
知道怎样消息映射吗
hansa 2006-08-25
  • 打赏
  • 举报
回复
多谢指教,那我还得传一个对话框的hwnd进来对吗?
zhihong123 2006-08-25
  • 打赏
  • 举报
回复
比如说你对CEdit重写为CMyEdit,那么你就在CEdit类的OnInitDialog()函数中调用它:
CMyEdit m_edit;
m_edit.SubClassWindow(GetDlgItem(IDC_EDIT)->m_hWnd);
这样就OK了;
zhihong123 2006-08-25
  • 打赏
  • 举报
回复
调用SubClassWindow(...)不是this指针,因为你是要使它能在对话框里使用,所以你必须要用到对话框的对象来调用SubClassWindow(...),这个函数的作用你还是很模糊,它是让其他窗口拥有用户自定义的消息,所以必须是要获得其他窗口的指针来调用它
hansa 2006-08-25
  • 打赏
  • 举报
回复
OnKeyUps是与WM_USER_KEYUPS相关的函数
hansa 2006-08-25
  • 打赏
  • 举报
回复
// EditCls.cpp : implementation file
//

#include "stdafx.h"
#include "Project1.h"
#include "EditCls.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// EditCls

EditCls::EditCls()
{
SubclassWindow(this->GetSafeHwnd());
}

EditCls::~EditCls()
{
}


BEGIN_MESSAGE_MAP(EditCls, CEdit)
//{{AFX_MSG_MAP(EditCls)
ON_WM_KEYUP()
ON_MESSAGE(WM_USER_KEYUPS, OnKeyUps)
//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// EditCls message handlers

void EditCls::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default

SendMessage(WM_USER_KEYUPS);
CEdit::OnKeyUp(nChar, nRepCnt, nFlags);

}

void EditCls::OnKeyUps(WPARAM wParam,LPARAM lParm)
{
this->SubclassWindow(this->GetSafeHwnd());
AfxMessageBox("Hello");
}
zhihong123 2006-08-25
  • 打赏
  • 举报
回复
怎么会....郁闷中...窗口子类化就是这样,你把你的代码贴出来看看
hansa 2006-08-25
  • 打赏
  • 举报
回复
但,试过没有用哦
zhihong123 2006-08-25
  • 打赏
  • 举报
回复
给你个例子吧:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
if ( CMDIFrameWnd::OnCreateClient(lpcs, pContext) )
{
m_wndMDIClient.SubclassWindow(m_hWndMDIClient);
return TRUE;
}
else
return FALSE;
}
就在你消息里写就可以了
hansa 2006-08-25
  • 打赏
  • 举报
回复
Up,SubclassWindow(this->GetSafeHwnd())放大哪里调呢?
zhihong123 2006-08-25
  • 打赏
  • 举报
回复
SubclassWindow( HWND hWnd )是CWnd的成员函数,封状好了的,你只要把你控件的hWnd传过去就可以了呀,很简单的
hansa 2006-08-25
  • 打赏
  • 举报
回复
消息怎样定义成全局呢
hansa 2006-08-25
  • 打赏
  • 举报
回复
UP,能不能详细一点呢
zhihong123 2006-08-25
  • 打赏
  • 举报
回复
窗口子类化,你看看SubClassWindow(**)这个函数,应该就可以了
erdgzw 2006-08-25
  • 打赏
  • 举报
回复
把自义消息定义为全局的就可以了。
aiguo26 2006-08-25
  • 打赏
  • 举报
回复
捕获对话框的消息,进行特殊处理,再操作CEdit
可能对话框把消息给捕获了,而不是CEdit
limu810812 2006-08-25
  • 打赏
  • 举报
回复
好!

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧