zoukankan      html  css  js  c++  java
  • 最好是在线程函数内发送消息给主窗口,主窗口响应消息控制进度条控件



    最好是在线程函数内发送消息给主窗口,主窗口响应消息控制进度条控件

    线程中发送自定义消息到UI线程,在UI线程的消息响应函数中去操作UI界面上的控件,不要再线程中直接操作界面上的控件


    /C++// 自定义消息号 #define WM_MY_MESSAGE WM_USER+1 class CMyDlg : public CDialog { ... public: // 自定义消息响应函数 afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); ... private: // 假设这个函数启动线程 void StartThread(); private: CProgressCtrl m_progressCtrl; ... } BEGIN_MESSAGE_MAP(CMyDlg, CDialog) ... ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage) END_MESSAGE_MAP() ... // 使用wParam作为progressCtrl的位置参数 LRESULT CMyDlg::OnMyMessage(WPARAM wParam, LPARAM lParam) { int nPos = (int)wParam; this->m_progressCtrl.SetPos(nPos); return 0; } void CMyDlg::StartThread() { // 将this指针作为参数传递给线程函数 AfxBeginThread(ThreadProc, this); } UINT ThreadProc(LPVOID p) { // 指针类型转换 CMyDlg* pDlg = (CMyDlg*) p; int nPos = 0; // progressCtrl进度条位置 // 对进度条位置的一些处理 ... // 发送消息给窗体,第一个参数是进度条位置信息 pDlg->SendMessage(WM_MY_MESSAGE,(WPARAM)nPos, 0); return 0; }

     

    共享的几篇好的word下载地址:

    MFC好的文章分享

    MFC使用SendMessage()发送自定义消息实现进程间通信

     
    1.新建两个对话框项目,分别在StdAfx.h中添加自定义消息
    #define WM_CONTROLPRINT WM_USER+1001
    2.发送端,获得其他窗口句柄的方法FindWindow();
    复制代码
    void CAaDlg::OnButtonsend() 
    {
        // TODO: Add your control notification handler code here
        
    //通过窗体名称,获取其他进程窗口句柄
        CWnd *pWnd=CWnd::FindWindow(NULL,_T("Bb")); 
        if(pWnd==NULL)
        {
            AfxMessageBox("接收程序没有运行!");
            return ;
        }

        pWnd->SendMessage(WM_CONTROLPRINT,NULL,0);
    }
    复制代码
    3.接收端,接收其他进程发过来的消息。
    复制代码
    //消息响应函数
    void  OnControlPrint(WPARAM wParam, LPARAM lParam);
    void  CBbDlg::OnControlPrint(WPARAM wParam, LPARAM lParam)
    {
            if(wParam==0 && lParam==0)
                AfxMessageBox("HelloWorld!");

            return ;
    }
    //添加消息映射
    BEGIN_MESSAGE_MAP(CBbDlg, CDialog)
        //{{AFX_MSG_MAP(CBbDlg)
        ON_MESSAGE(WM_CONTROLPRINT, OnControlPrint)
        //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    复制代码
  • 相关阅读:
    Unity 3(一):简介与示例
    MongoDB以Windows Service运行
    动态SQL中变量赋值
    网站发布IIS后堆栈追踪无法获取出错的行号
    GridView Postback后出错Operation is not valid due to the current state of the object.
    Visual Studio 2010 SP1 在线安装后,找到缓存在本地的临时文件以便下次离线安装
    SQL Server 问题之 排序规则(collation)冲突
    IIS 问题集锦
    linux下安装mysql(ubuntu0.16.04.1)
    apt-get update 系列作用
  • 原文地址:https://www.cnblogs.com/zhuxuekui/p/3653297.html
Copyright © 2011-2022 走看看