`
tcspecial
  • 浏览: 910415 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

SendMessage 传递 CString

阅读更多

 

1. CString作为参数传递

MFC编程中,CString可以直接作为SendMessage()参数来传递。推荐用阻塞方式发送消息,这样能防止CString被析构,而引起内存访问错误。

 

CString str = _T("hello");
 
// 发送端
SendMessage( m_pPhoneWnd->GetSafeHwnd(),MY_MSG,(WPARAM)&str,(LPARAM)0 );
 
// 接收端
CString *str = (String*)wPar;

  

2. CString转化为char*

VC编程中,经常涉及到多字节和宽字节之间转换,过程比较麻烦。网上大部分都是直接强转:char *p = (LPCSTR)(LPCTSTR)str,经测试不可行。

 

可通过下列三种方式转化:

CString str = _T("hello世界");

 

方法一:T2A,A2W

USES_CONVERSION;   // 必须调用该宏,才能使用T2A
char *pBuf = T2A( strPassWord.GetBuffer(0) );

  

方法二:WideCharToMultiByte

A2W宏内部调用就是该API。

char *pstr = newchar[len+1];  // 字节为单位
WideCharToMultiByte(CP_ACP,0,str,str.GetLength() + 1,pstr,len+ 1 ,NULL,NULL);// 宽字节转化为多字节
pstr[len+1]= '\0';  

 

方法三:wcstombs_s

size_t sz=0;
wcstombs_s( &sz,str,len,str,_TRUNCATE );

 

 

 

分享到:
评论

相关推荐

    通过PostMessage,SendMessage将CString发送和发布到Windows

    使用C++编程语言,特别是MFC(Microsoft Foundation Classes)框架时,如何利用`PostMessage`和`SendMessage`这两个API函数来传递`CString`对象。`CString`是MFC提供的一种字符串类,它提供了丰富的字符串操作功能,...

    VC中怎样使用sendmessage自定义消息函数

    在Visual C++ (VC) 的MFC框架中,`SendMessage`函数是一种非常重要的通信机制,用于在不同的窗口之间传递信息。通过自定义消息,开发者能够实现更加灵活和高效的功能交互。本文将详细介绍如何在MFC应用程序中使用`...

    程序间的数据传递

    1. SendMessage:SendMessage是Windows操作系统提供的一种数据传递方式,通过向目标窗口发送消息实现数据传递。 2. WM_COPYDATA:WM_COPYDATA是Windows操作系统提供的一种数据传递方式,通过CopyDataStruct结构体...

    SendMessage应用实例

    `SendMessage`是Windows API中一个重要的函数,用于在窗口间传递消息。在这个名为"SendMessage应用实例"的资源中,我们将深入探讨如何利用MFC和`SendMessage`来实现跨控件通信,特别是涉及到一个子控件的属性更新,...

    MFC编程中对话框之间参数传递的两种方法

    CString strData = "要传递的数据"; ``` **步骤2 - 设置临时对象** 在源对话框的按钮点击事件或其他触发传递的事件中,创建目标对话框并设置临时对象: ```cpp CTargetDlg dlg; dlg.m_strReceivedData = strData;...

    基于MFC编编程 函数单向传递

    SendMessage(IDC_BUTTON1, WM_COMMAND, IDOK, 0); // 在消息映射中处理消息 ON_COMMAND(IDOK, &CMyClass::OnOk) { // 处理OK按钮点击事件 // ... } ``` 3. 成员变量:有时,我们可能需要在多个函数之间共享状态...

    对话框数据传递,在对话框1点击ok按钮的时候弹出对话框2,并且把对话框1中的数据显示在对话框2中

    这可以通过`PostMessage`或`SendMessage`函数实现。 此外,还可以利用MFC的`CDataExchange`机制,通过`DDX`(Dialog Data Exchange)和`DDV`(Dialog Data Validation)函数在对话框控件和成员变量之间自动交换和...

    两个相互独立的对话框(非父子关系)之间的通信(消息响应、数值传递)

    CString str = m_sharedString.GetData(); ``` 总结来说,实现MFC中两个非父子关系的对话框间的通信,主要依赖于自定义消息和共享数据结构。自定义消息能够实现异步或同步的通知,而共享数据则提供了数据交换的...

    VC窗体通信

    CString strCount; strCount.Format(_T("字符数:%d"), wParam); SetDlgItemText(IDC_LABEL1, strCount); // 更新标签文本 return 0; } ``` 在这个例子中,`WM_USER_DEFINED`是自定义的消息,当文本框内容变化...

    C++ WM_COPYDATA 进程通信

    首先,我们要了解`WM_COPYDATA`结构体`COPYDATASTRUCT`,它包含两个主要字段:`dwData`用于存放自定义标识符,`lpData`用于存放实际传递的数据,而`cbData`则是数据的大小。在发送`WM_COPYDATA`消息时,我们需要创建...

    windows 常用消息

    通常使用 `CRect` 类型,也可以直接传递 `RECT` 结构体。例如,`CRect(0, 0, 10, 10)` 创建了一个宽度为10、高度为10的矩形区域。 - `CWnd* pParentWnd`:指向按钮所在窗口的指针。通常情况下,你可以传递 `this` ...

    VC 模态对话框与应用程序之间的数据交换.rar

    SendMessage(AFX_WM_MY_DIALOG_RESULT, 0, (LPARAM)m_inputText); ``` 这样,当用户关闭对话框时,父窗口就能接收到对话框的输出数据。 总的来说,VC++中的模态对话框与应用程序之间的数据交换涉及到控件成员变量...

    C++ 关于MFC多线程编程的注意事项

    这个函数用于启动一个新的线程,并且需要提供两个主要参数:线程函数指针和传递给线程函数的参数。例如: ```cpp CWinThread* AfxBeginThread(AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority = ...

    vc\ddv通过程序向RichEditView写文本ip_com_0138343a2099fc.zip

    `dwCookie`参数用于传递要插入的文本,`EditStreamCallback`会接收到这个文本并写入到`RichEditCtrl`中。 除了基本的插入文本,还可以进行更复杂的操作,比如设置字体、颜色、对齐方式等。这些可以通过调用`...

    MFC创建用户界面线程方法2

    在MFC中,可以使用各种机制来实现线程间通信,如`PostMessage`、`SendMessage`、事件对象(如`CEvent`)、信号量(`CSemaphore`)、互斥体(`CMutex`)以及共享内存。在这个例子中,描述提到了三个用户界面线程之间...

    常规的C++/MFC基础知识测验试题

    int MyWriteFile(CString strFileName, CString strText) { int nRet = 0; try { CFile myFile; if (!myFile.Open(strFileName, CFile::modeWrite|CFile::shareExclusive|CFile::modeCreate, NULL)) { throw ...

    MFC多线程及定义消息的实现

    这里`this`参数是指向当前对话框对象的指针,它会作为线程函数的参数传递进去,从而使得线程可以访问对话框中的控件。 #### 三、同步机制 当多个线程需要访问同一资源时,为了避免竞态条件和死锁等问题,需要使用...

    VISUAL_C MFC编程实例(第一部分·上)

    - 使用`SendMessage()`函数发送。 - **3.1.2 寄送一个消息:** - 使用`PostMessage()`函数寄送。 - **3.1.3 发送一个消息与寄送一个消息的比较:** - 发送会阻塞当前线程直到消息被处理;寄送则不会等待。 **3.2...

    VC++常用功能实例

    ◆如何使用Sendmessage来异步触发某事件◆ 22 ◆如何修改父类的相关控件属性◆ 22 ◆如何在程序中得到控件的名◆ 22 ◆如何控制菜单的事件程序◆ 22 ◆如何使用控件中的数据录入的控制属性◆ 23 ◆哪些函数是文档、...

    VC++常用的共用函数100多页

    ◆如何使用Sendmessage来异步触发某事件◆ 22 ◆如何修改父类的相关控件属性◆ 22 ◆如何在程序中得到控件的名◆ 22 ◆如何控制菜单的事件程序◆ 22 ◆如何使用控件中的数据录入的控制属性◆ 23 ◆哪些函数是文档、...

Global site tag (gtag.js) - Google Analytics