以下是我的思路,大虾帮忙看下,是否正确
1)在Mainframe中获取已打开的几个文档void CMainFrame::getimage()
{
int i=0;
CDocManager* pManager=((CImageProcessApp *)AfxGetApp())->m_pDocManager;
if (pManager==NULL)
return;
POSITION postTemplate=pManager->GetFirstDocTemplatePosition();
if (postTemplate !=NULL)
{
CDocTemplate* pTemplate=pManager->GetNextDocTemplate(postTemplate);
         POSITION posDoc=pTemplate->GetFirstDocPosition();
 while((posDoc !=NULL)&&(i<3))
 {
           CImageProcessDoc* pThisOne=(CImageProcessDoc*)pTemplate->GetNextDoc(posDoc);
   Hshuzu[i]=pThisOne->m_pDib;
   i=i+1;
 }
}}
2)图象合并的算法实现
HDIB UniteImageDIB(HDIB HDib1, HDIB HDib2, HDIB HDib3)
{
if (HDib1 == NULL)
return NULL;
HDIB hNewDIB = CopyHandle(HDib1);
BITMAPINFO *bmi = (BITMAPINFO *)GlobalLock(hNewDIB);
if (! bmi)
return NULL;
WaitCursorBegin();
WORD colorNum=DIBNumColors(hNewDIB);
if(colorNum)
AfxMessageBox("对不起,本功能暂时只支持24位位图");
LPBITMAPINFOHEADER lpbi = (LPBITMAPINFOHEADER)bmi;
LPBYTE lpbits=(LPBYTE)lpbi+lpbi->biSize;
BITMAPINFO *bmi2 = (BITMAPINFO *)GlobalLock(HDib2);
LPBITMAPINFOHEADER lpbi2 = (LPBITMAPINFOHEADER)bmi2;
LPBYTE lpbits2=(LPBYTE)lpbi2+lpbi2->biSize;
BITMAPINFO *bmi3 = (BITMAPINFO *)GlobalLock(HDib3);
LPBITMAPINFOHEADER lpbi3 = (LPBITMAPINFOHEADER)bmi3;
LPBYTE lpbits3=(LPBYTE)lpbi3+lpbi3->biSize;
int nDelta = WIDTHBYTES(lpbi->biBitCount*lpbi->biWidth) - lpbi->biWidth*lpbi->biBitCount/8;
for (int ny=0; ny<lpbi->biHeight; ny++)
{
for (int nx=0; nx<lpbi->biWidth; nx++) {
               *(lpbits+1)=*(lpbits2+1);
               *(lpbits+2)=*(lpbits3+2);
                lpbits+=3;
                lpbits2+=3;
                lpbits3+=3; 
}
        lpbits+=nDelta;
lpbits2+=nDelta;
lpbits2+=nDelta;
}
GlobalUnlock(hNewDIB);
GlobalUnlock(HDib2);
GlobalUnlock(HDib3);
return hNewDIB;
}
3)点击菜单以实现功能
void CImageProcessView::OnUniteImage() 
{
    CImageProcessDoc *pDoc=(CImageProcessDoc *)GetDocument();
    AfxGetApp()->BeginWaitCursor();
HDIB HDib1,HDib2;
    CMainFrame * pMainFrame=(CMainFrame *)AfxGetMainWnd();
    pMainFrame->getimage();
HDib1=pMainFrame->Hshuzu[1];
HDib2=pMainFrame->Hshuzu[2];
pDoc->m_pDib->uniteimage(HDib1,HDib2);
    AfxGetApp()->EndWaitCursor();
pDoc->SetModifiedFlag(TRUE);
Invalidate();

}