Windows

關於 Windows 中程式參數編碼的一些討論

標題實在下得很爛,但不知道怎麼下比較好。

這篇主要是回答 PTT 上 C_CPP 板,有 Windows programming 的初學者在問 C 程式的命令列為什麼不吃 Unicode 的問題。

這個問題其實是很大的。我的回答可能也不是很清楚。但好歹是我花時間寫的東西,就留在這邊記錄一下吧!


首先,我複議 lwecloud(註:另一位鄉民)的說法:都已經 2023 年,Windows 都是 NT-based 的了,不要再用 MBSC/ANSI 了。

你要做的事,不是把 compiler option 改成 MBSC,而是要想為什麼你在 Unicode 下編譯/執行有問題?

Read More

在 wxWidgets 中執行繁重工作時不讓 UI 凍結的作法

我想要用 wxWidgets 寫一個程式,能夠掃瞄整個目錄結構,然後把不需要的檔案刪掉。掃瞄這件事情可以用遞迴來做:

void MainFrame::RecursiveClean(const wxString& dirname) {
  wxDir dir(dirname);
  if (!dir.IsOpened()) {
    return;
  }
  wxString name;
  wxFileName fn(dirname, "");
  bool found = dir.GetFirst(&name);
  while (found) {
    wxString fullpath = fn.GetPathWithSep() + name;
    if (wxDirExists(fullpath)) {
      if (delete_folder_patterns_.Match(name)) {
        // ...delete folder...
      } else {
        RecursiveClean(fullpath);
      }
    } else if (wxFileExists(fullpath)) {
      if (delete_file_patterns_.Match(name)) {
        // ...delete file...
      }
    }
    found = dir.GetNext(&name);
  }
}
Code language: C++ (cpp)

但掃瞄的過程很花時間。如果我們就直接這樣硬幹,在掃瞄的過程中,wxWidgets 就沒有辦法處理事件,導致整個 UI 就會停在那邊沒有反應。所以我們要想個方法去解決。

Read More