Skip to content

Instantly share code, notes, and snippets.

@nibasya
nibasya / RedmineDownloaderDlg.cpp
Last active March 25, 2026 15:10
Create modeless dialog without preparing additional class
#include <future>
#include <atomic>
void CRedmineViewerDlg::LoadIssues()
{
// load issue list
CString listFileName = CString(L".") + IssueListFileName;
if (!PathFileExists(listFileName)) {
MessageBox(L"Failed to find issue list", L"Failed", MB_ICONINFORMATION);
return;
#include <md4c-html.h>
static void ConvertMdToHtmlSub(const MD_CHAR* text, MD_SIZE size, void* userData)
{
std::string* out = static_cast<std::string*>(userData);
out->append(text, size);
}
std::string ConvertMdToHtml(std::string mdText)
{
@nibasya
nibasya / RedmineDownloaderDlg.cpp
Last active March 15, 2026 17:58
Get path of Drag & Dropped file from WebView2 control using RegisterDragDrop()
#include "RPTT.h"
BOOL CRedmineViewerDlg::OnInitDialog()
{
// snip
OleInitialize(NULL);
// snip
}
void CRedmineViewerDlg::OnDestroy()
@nibasya
nibasya / RedmineDownloaderDlg.cpp
Created March 15, 2026 17:46
Get path of Drag & Dropped file from WebView2 control
HRESULT CRedmineViewerDlg::WebView2CreateController(HRESULT result, ICoreWebView2Controller* controller) {
if (FAILED(result) || controller == nullptr) return result;
ICoreWebView2* rawWebView = nullptr;
if (SUCCEEDED(controller->get_CoreWebView2(&rawWebView)) && rawWebView != nullptr) {
// Hook new window requested on drag&drop
m_WebView->add_NewWindowRequested(
Callback<ICoreWebView2NewWindowRequestedEventHandler>(
[this](ICoreWebView2* sender, ICoreWebView2NewWindowRequestedEventArgs* args) {
return this->NewWindowRequestHandler(sender, args);
@nibasya
nibasya / RedmineDownloaderDlg.cpp
Last active February 22, 2026 13:34
RedmineサーバーからIssue一覧をcppRESTの同期処理で取得しUTF-8で保存するコード例
// スレッド起動処理
void CRedmineDownloaderDlg::OnBnClickedButtonExecute()
{
// (略)
// スレッド実行準備
m_CtrlButtonExecute.EnableWindow(FALSE); // 実行ボタンを無効化して、二重実行を防止
m_CtrlButtonCancel.EnableWindow(TRUE); // キャンセルボタンを有効化
m_fStopThread = false; // ワーカースレッドの停止フラグをリセット
void TryMalloc(const int size) {
char* data = (char*)malloc(size);
free(data);
}
void TryNew(const int size) {
char* data = new char[size];
delete[] data;
}
@nibasya
nibasya / Afxmt.h
Created November 24, 2022 13:32
Definition of CSingleLock::m_bAcquired
class CSingleLock
{
// snip
protected:
BOOL m_bAcquired;
};
@nibasya
nibasya / afxmt.inl
Created November 24, 2022 13:31
CSingleLock::IsLocked()
_AFXMT_INLINE BOOL (::CSingleLock::IsLocked())
{
return m_bAcquired;
}
@nibasya
nibasya / half-automatic_troops.blueprint
Created June 11, 2020 14:22
Half-automatic troops for Factorio using AAI Programmable Vehicles
0eNrtfctyI0ey5b/UsqdQFh7vaOvW5vZCi7mb2xvJxtrKWEVUCSaQoBFkqWnX9AHzHzM/Nl8yAAiSiYz0dPfIBAkmYtPWkshgZrrHOccj/PHfH74s7+c3t4vruw9//e8Pi6+r6/WHv/6v//6wXny/vlhu/93dw838w18/LO7mVx8+fri+uNr+0/314m62+eG729Xyw58fPyyuL+f//vBX+PMj+as/5r8tvi7ns+XFen47u7u4/r35f79eXF+vrhtLmj//9fHD/PpucbeYPz7a7h8ePl/fX32Z327+5vPKXxbfZ/Pl/Ovd7eLr7Ga1nG/+6M1qvfnNzYqbx9msNgPzyX388LD5f0Z/cps/s3mJ682vLHYv/t8fYPs/t/PL5l9abP4J7OZHF7df7xd3j//857/+/HP7tq2n0c9PczW/XNxfkQ9kwv5xoGs5I15O9S1npctp07ecky4Hvm85X2pJJbKka1vy48F/NzYitg3S1019bxvFtuhbLQlXc32LgRKuBr3PBiBdrvfDgXSP6V6vA1PodjpK3M4A4XbOIW4HL7v24nZx99vV/G7zeF9XV18W1xd3q9uuh1Qve2PziJeL28cn3OHTHrY/f5n/dvFjsfn9zS+9LPx5858vF8+v821xu777nEH6j8Xt3f3m3zw/2eNPzOYXX3/bgvd6vl1mu9Z6A+sbbtl41Opmfnvx+BQf/sfmN1f3dzf34rX/FOz0zQf9+EFjBjE8RAc34PPrdL6f34/z+V9Y4XL+dXG5EQq9394JP/1+0WHf/efGR+d/0Ov57feHD7sPenVzcbt7ob9++H//+/8WWOd/Pq5z87B5kfvru8/fbldXnxfXmzU+/PXbxXI9FxiubRqdMWRuOtzQEJiGDjJDm7cw9P4zP20r3bLd3wss988RLbfdLBLL6X7LRablohwhTw0gZ3CIkH8psOR/yNgpiGyRmLZIol2k3mIT/cfhJlKtTfS3sk8/3iaKmWE+fvh+O59fZ0ApMqFWmQmZ66LBppJuPP1G++4
@nibasya
nibasya / EdgeCounter.blueprint
Last active June 9, 2020 03:41
Edge Counter for Factorio
0eNrll0uOm0AQhu9Sy6Qd8bCNhUaz8TarZBlZCEN5XBJ0o6axYll9gNwjuVhOkm5IPIzxA0gyjpSNrX79FPX55zcHWGcVFpK4gvAAlAheQvjpACU98Tizc2pfIIRACnNgwOPcjlJMKEU5SUS+Jh4rIUEzIJ7iZwhdzW4KxJLUNkdFyXkNT68YIFekCJuK6sE+4lW+RmkucpSyNauYq7YQg0KU5qzgtgKjN5kx2JsvUxukJDFp1jxmjyspsmiN23hH5qw5sKFMobzQiR1JVZmZYwHNjsl7W34iKtvKRasZq3qa8+aapVVy7YfEtH1jlDblkEwqUvWwbmRreX66vNK6teVXa7xrmLqd8d4N6s1PzcispXS8ow3JUkVDe9WAq9tlSixiWZcYwvcv38wRUamiGiD6oREt9lFNIdpIkUfEjQaEmzgrUfcn0WDzLqz6/UD4N37uXRbOMBbPsr+HA+Nka5tXopWJnsFMjM1EgYZLXQa8GYFlCVqPtoB3lcO0H4fpIEO4d/DD8qUfnBM/PIxr+x9zg9+BwuBJIvLTjYsh9GYdev1UL2GeDbWbfx+3Lc9azXnptLd/3WmzU1bsmreGojxLaD4umZy7BZPTCaavI7h8fLVgCvpxCEYHk/O/5tJ8iB16PrAWo3LJ+Wdi6fHOsRT0jaXp9Ufd5dTqF0fs9p8SU1n9AhS2XrgY7MxLRg0xCHzX9YNg6iy0/gGu/axX