多线程中AfxGetApp()->m_pMainWnd和AfxGetMainWnd() 的区别?

         一个最普通的对话框程序,是用afxbeginthread新建一个线程,在里面是用
        CxxDlg * dlgPtr=(CxxDlg *)AfxGetApp()->m_pMainWnd;

        CxxDlg * dlgPtr=(CxxDlg *)AfxGetMainWnd()  ;
两个代码得到的dlgPtr是不是一样的 你们觉得??
       在我在线程函数中使用dlgPtr->xxx传对话框的一个成员变量到线程函数中,两个dlgptr的指针肯定是不一样的,有位前辈给我的说明是:

       If AfxGetMainWnd is called from the application's primary thread, it returns the application's main window according to the above rules. If the function is called from a secondary thread in the application, the function returns the main window associated with the thread that made the call.

     总之,我觉得最大的收获就是要记住他们的不同。恰巧在多线程中我遇到多次了!!

这段代码是一个命令处理程序,主要作用是对图像进行增强处理,并在新窗口中显示处理后的图像。下面是对代码的解释: ```c++ CDIPFrameworkDoc* pDoc = GetDocument(); ImgCenterDib* pDib = pDoc->GetPDib(); ``` 首先获取当前文档的指针图像数据块的指针。 ```c++ Histogram hist(pDib->GetDimensions(), pDib->m_nBitCount, pDib->m_lpColorTable, pDib->m_pImgData); ``` 创建一个直方图对象,用于计算图像的直方图。传入图像的尺寸、位深、颜色表像素数据。 ```c++ if (pDib->m_nBitCount == 8) { hist.computeHistGray(); } else hist.computeHistBrightness(); ``` 如果图像是灰度图像,就计算灰度直方图;否则计算亮度直方图。 ```c++ CImgEnhance imgenhance(pDib->GetDimensions(), pDib->m_nBitCount, pDib->m_lpColorTable, pDib->m_pImgData); ``` 创建一个图像增强对象,传入图像的尺寸、位深、颜色表像素数据。 ```c++ //添加噪声 imgenhance.AddPepperSaltNoise(); ``` 对图像添加椒盐噪声,增加图像的噪声。 ```c++ //梯度锐化 imgenhance.GradSharp(30); ``` 对图像进行梯度锐化,增强图像的边缘信息。 ```c++ //创建新窗口,打印图像 CMainFrame* pFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd); pFrame->SendMessage(WM_COMMAND, ID_FILE_NEW); CDIPFrameworkView* pView = (CDIPFrameworkView*)pFrame->MDIGetActive()->GetActiveView(); CDIPFrameworkDoc* pDocNew = pView->GetDocument(); ImgCenterDib* dibNew = pDocNew->GetPDib(); dibNew->ReplaceDib(imgenhance.GetDimensions(), imgenhance.m_nBitCountOut, imgenhance.m_lpColorTableOut, imgenhance.m_pImgDataOut); pView->OnInitialUpdate(); pDocNew->SetModifiedFlag(TRUE); pDocNew->UpdateAllViews(pView); ``` 创建一个新窗口,将处理后的图像显示在新窗口中。具体操作为:发送新建文件命令,获取新窗口视图文档的指针,将处理后的图像数据替换原有的图像数据,更新视图文档状态。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值