[問題] 有關 VC++(MFC) 於SDI 呼叫 Modeless Dialog 一問
請問各位前輩有關 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
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章