<!--  As an open source project with a dedicated but small maintainer team, it can sometimes take a long time for issues to be addressed so please be patient and we will get back to you as soon as we can.
-->

### Preflight Checklist
<!-- Please ensure you've completed the following steps by replacing [ ] with [x]-->

* [x] I have read the [Contributing Guidelines](https://github.com/electron/electron/blob/master/CONTRIBUTING.md) for this project.
* [x] I agree to follow the [Code of Conduct](https://github.com/electron/electron/blob/master/CODE_OF_CONDUCT.md) that this project adheres to.
* [x] I have searched the issue tracker for an issue that matches the one I want to file, **only found a [closed issue](https://github.com/electron/electron/issues/21159) that doesn't works**.

### Issue Details

* **Electron Version:**
  * 7.1.9
* **Operating System:**
  * Windows 10, 1809

### Expected Behavior
The `checkboxChecked` property of dialog boxes should works in the promise.

### Actual Behavior
It doens't work when the `checkboxChecked` is set to be false, it works when `checkboxChecked` is set to be true.
This problem is said to be solved, but it hasn't been...

### To Reproduce
@jrdiard gave a example in the old and closed 21159 issue,
with the fiddle code in main.js:
```
const { app, BrowserWindow, dialog } = require('electron')

let mainWindow = null

app.on('ready', () => {
  mainWindow = new BrowserWindow({ height: 600, width: 600 })

  var ret = dialog.showMessageBox(mainWindow, {
    type: "question", buttons: ["Yes", "No"],
    message: "Do you want to run the demonstration scenes?",
    cancelId: 1,
    checkboxLabel: "Save images for each scene", checkboxChecked: true, noLink: false
  });
  ret.then((val) => {
    console.log("Run Demo: " + val.response + " Save scenes: " + val.checkboxChecked);
  });

})
```

shell/browser/ui/message_box_win.cc
std::map<int, int> id_map;
  std::vector<TASKDIALOG_BUTTON> dialog_buttons;
  if (no_link) {
    for (size_t i = 0; i < buttons.size(); ++i)
      dialog_buttons.push_back(
          {static_cast<int>(i + kIDStart), buttons[i].c_str()});
  } else {
    MapToCommonID(buttons, &id_map, &config.dwCommonButtons, &dialog_buttons);
  }
  if (dialog_buttons.size() > 0) {
    config.pButtons = &dialog_buttons.front();
    config.cButtons = dialog_buttons.size();
    if (!no_link)
      config.dwFlags |= TDF_USE_COMMAND_LINKS;  
  }
  int button_id;
  int id = 0;
  BOOL verificationFlagChecked = FALSE;
  TaskDialogIndirect(&config, &id, nullptr, &verificationFlagChecked);
  if (id_map.find(id) != id_map.end())  
    button_id = id_map[id];
  else if (id >= kIDStart)  
    button_id = id - kIDStart;
  else
    button_id = cancel_id;
  return std::make_pair(button_id,
                        checkbox_checked ? verificationFlagChecked : false);
}
DialogResult ShowTaskDialogUTF8(const MessageBoxSettings& settings) {