[問題] 有關 VC++(MFC) 於SDI 呼叫 Modeless Dialog 一問

看板C_and_CPP (C/C++)作者 (想重回校園的工程師)時間15年前 (2010/10/25 15:50), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
請問各位前輩有關 VC++(MFC) 於SDI 呼叫 Modeless Dialog 並且由 Dialog呼叫 DLL 運算 這個架構的一個問題 : 小弟因想把手頭手中零零散散的程式整合於一個UI中控管 以後也好直接於此專案中新增/修改即可 於是著手設計了一個 vc++ SDI (不使用 Document/View) 架構的視窗 並且在 Menu Bar 上方加入一些項目,選擊後將呼叫各個不同的Dialog 基本上程式如下 : #include "GCISDlg.h" //<--小弟的Modeless Dialog(IDD_CRAWLERGCIS_DIALOG為代號); void CMainFrame::OnGovGcis() //<--點擊 Menu Item 觸發 { CGCISDlg *pGCISDlg = new CGCISDlg; pGCISDlg->Create(IDD_CRAWLERGCIS_DIALOG,&m_wndView);//將childView指標傳入Dialog為他的Parent pGCISDlg->ShowWindow(true); } 基本上這樣小弟的SDI視窗內就會成功的出現這 Modeless Dialog 現在小弟的這個Dialog有 一個Button(開始運算用) , 一個CEdit(顯示運算結果CString), 一個CProgressCtrl(顯示運算進度) 基本上的程式如下: BOOL CGCISDlg::OnInitDialog(); {...略...} void CGCISDlg::OnBnClickedBtnCrawle() { pGCISCrawler = new CGCISCrawlerKernel(this->m_hWnd,2); //以上是小弟的一個DLL 此DLL 直接把CLASS 宣個成 AFX_EXT_CLASS //所以是把整個CLASS給導出來 //而此DLL Init後直接會建立並進入 Thread //而每筆運算完成後會利用 ::SendMessage() 和傳入的 m_hWnd 將數值傳出給 //呼叫他的這個Dialog(CGCISDlg) } //以下是小弟接收 DLL SendMessage的 Function Call LRESULT CGCISDlg::OnGetCrawlerMSG(WPARAM wParam,LPARAM lParam) { tagExplainInfo *pExplainInfo = (tagExplainInfo *)wParam;//這是小弟自訂的一個struct int iNow = (int)lParam;//這只是傳回完成的比數進度 if(pExplainInfo != NULL) { this->pHTMLEdit->SetWindowTextW(pExplainInfo->strContext); this->pProgressCrawler->SetPos(iNow); } return 0; } 以上描述~ 現在問題來了!! 基本上介面的開起呼叫都OK 而且 DLL 以正常運作 , 重點在 DLL 送出 SendMessage後 CGCISDlg 也正常收到訊息,並且進入 OnGetCrawlerMSG Function Call 之後....遇到 : 1.明明DLL再送出 tagExplainInfo struct 時內部的CString都有字串,偏偏sendMessage過來後接收 後發現裡面每個CString都沒值了,神奇的是10個CString就是有一個CString有正確的字傳,其他的都是空值 2.好~小弟先不管String了(mark掉處理wParam那一行),先收int(進度)單純一點八... 的確,lParam正確的收到了,也成功的轉成 int 但是不管怎麼樣....SetPos不管傳多少給她,CProgressCtrl就是不會動....?! 以上問題~ 請教各位前輩~是否小弟的架構有問題,還是? 請各位前輩給予指導 謝謝各位 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.43.118.33
文章代碼(AID): #1CnJQnke (C_and_CPP)
文章代碼(AID): #1CnJQnke (C_and_CPP)