GetOpenFileName设置居中

80 篇文章 2 订阅
static UINT_PTR CALLBACK OFNHookProc (HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam)
{
    if ((uiMsg == WM_NOTIFY) &&
        (reinterpret_cast<OFNOTIFY*>(lParam)->hdr.code == CDN_INITDONE))
    {
        RECT r;
        int w, h;
        GetWindowRect(GetParent(hdlg), &r);
        w = r.right - r.left;
        h = r.bottom - r.top;
        GetWindowRect(GetDesktopWindow(), &r);
        int xpos = (r.right-w)/2;
        int ypos = (r.bottom-h)/2;
        SetWindowPos(GetParent(hdlg), HWND_TOPMOST, xpos, ypos, 0, 0, SWP_NOSIZE);
    }
    return 0;
}

std::string GetOpenFileName(const char* lpstrFile)
{
    string strRet;
    char szFilter[] = "All Files(*.*)\0*.*\0Txt Files(*.txt)\0*.txt\0\0";
    char szOpenFileName[MAX_PATH] = { 0 };
    if(lpstrFile != NULL)
        strcpy(szOpenFileName, lpstrFile);
    OPENFILENAMEA openFile = { 0 };
    openFile.lStructSize = sizeof(OPENFILENAME);
    openFile.hInstance = (HINSTANCE)GetModuleHandle(NULL);
    openFile.lpstrFilter = szFilter;
    openFile.lpstrFile = szOpenFileName;
    openFile.nMaxFile = MAX_PATH;
    openFile.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_EXPLORER | OFN_ENABLEHOOK;
    openFile.lpfnHook = OFNHookProc;
    if(GetOpenFileNameA(&openFile) == TRUE)
        strRet = szOpenFileName;
    return strRet;
}

参考:https://stackoverflow.com/questions/29931704/how-to-change-position-of-an-openfilename-dialog-in-windows

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值