2013-08-20 50 views
-1

我正在使用VS 2008並使用MFC應用程序。我有一個功能,請求用戶指定一個文件夾形式的對話框輸出圖像文件。當檢查複選框時,此功能會重複多次。僅當調用複選框時調用對話框函數

下面是一個使用框架生成我的主要功能的功能

void ClassABC::BrowseFolder(TCHAR path[MAX_PATH]) { .... } 

這裏是保存功能

void ClassABC::FileSave(IppImage<Ipp8u,1> const &im) 
{ 
TCHAR path[MAX_PATH]; 
TCHAR filename[256]; 
BrowseFolder(path); 
_stprintf(filename, "%s\\raw.bmp", path); 
ippiSaveBMP(filename, im); 
} 

和具有if語句,這樣

if (im != NULL) 
{ 
    if (MESSAGE_EXISTS(p,XYZCheck)){ 
     FileSave(im); } 

} 

一旦我選中複選框,會打開一個對話框詢問文件夾位置以保存輸出圖像e文件。只要文件保存在文件夾中,對話框就會再次打開,因爲它是由Save函數內部調用的BrowseFolder()函數調用的。我想知道一種可能的方法,只需調用BrowseFolder()一次來使用對話框來請求文件夾位置,而不是重複它自己。我不確定如何單擊時調用該函數一次。我知道它很容易使用按鈕,但我只是用複選框測試它,並希望看到相同的結果。任何方向都會有幫助。謝謝。

+0

你用什麼框架來生成你的「主要功能」? [我無法在MSDN/MFC文檔中找到對'MESSAGE_EXISTS'的任何引用] –

+0

我在工作中使用內部框架(機密)。它將複選框的控件綁定到MFC中的使用。這就是我希望某些不一定涉及複選框的原因,而是直接嘗試控制該功能。我在FileSave函數內做了這樣的事情。 static bool FirstTime = true; if(FirstTime){BrowseFolder(path); FirstTime = false; } 通過這樣做,我可以停止文件夾對話框多次出現,但是一旦取消選中該複選框並再次檢查它,它就不會出現。我知道我在這裏錯過了一些邏輯。 – Sharath

回答

0

MESSAGE_EXISTS函數或宏不是MFC的一部分,所以不清楚你在那裏做什麼。如果只想在單擊複選框時執行某些操作,則應在承載該複選框的窗口中添加一個BN_CLICKED消息處理程序。

+0

是的,這是真的。但是鑑於我正在使用一個內部框架,它實際上將複選框的控制和使用聯繫在一起。在這一點上我真的不能使用BN_CLICKED。這就是我在尋找能夠控制BrowseFolder()函數的原因,因爲在複選框被選中時只執行一次,並且當複選框狀態從未選中被檢查時再次執行它。有沒有辦法做到這一點?如果我聽起來愚蠢或愚蠢,我很抱歉。請幫助 – Sharath

相關問題