封装一个路径选择对话框

27 篇文章 2 订阅
class CPathDialog : public CObject
{
public:
    CPathDialog(LPCTSTR lpszTitle, LPCTSTR pszInitPath=NULL,HWND hParent=NULL);
    virtual ~CPathDialog();
    
    int DoModal();
    CString GetPathName() const;
    static int CALLBACK BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData);

private:
    HWND m_hParentWnd;
    CString m_strTitle;
    int m_nRootFolder;
    TCHAR m_szPathName[MAX_PATH];
};

CPathDialog::CPathDialog(LPCTSTR lpszTitle, LPCTSTR pszInitPath,HWND hParent):
    m_hParentWnd(hParent),m_strTitle(lpszTitle)
{
    if (pszInitPath)
        _tcscpy(m_szPathName, pszInitPath);
    else
        m_szPathName[0] = '\0';
    m_nRootFolder = CSIDL_DRIVES;
}

CPathDialog::~CPathDialog()
{
}

int CPathDialog::DoModal()
{
    int ret = IDCANCEL;
    LPITEMIDLIST pid1 = NULL, pid2 = NULL;
    LPMALLOC pMalloc = NULL;
    VERIFY(SUCCEEDED(::CoInitialize(NULL)));
    if (m_nRootFolder == 0)
    {
        pid1 = NULL;
    }
    else
    {
        if (!SUCCEEDED(SHGetSpecialFolderLocation(m_hParentWnd, m_nRootFolder, &pid1)))
            goto Done;
    }
    
    if (NOERROR == ::SHGetMalloc(&pMalloc))
    {
        BROWSEINFO bi;
        bi.hwndOwner = m_hParentWnd;
        bi.lpfn = &BrowseCallbackProc;
        bi.pszDisplayName = m_szPathName;
        bi.ulFlags = BIF_STATUSTEXT|BIF_RETURNFSANCESTORS|BIF_RETURNONLYFSDIRS;
        bi.lpszTitle = (LPCTSTR)m_strTitle;
        bi.pidlRoot = pid1;
        bi.lParam = (LPARAM)m_szPathName;
        if ((pid2 = ::SHBrowseForFolder(&bi)) != NULL)
        {
            if (::SHGetPathFromIDList(pid2, m_szPathName))
                ret = IDOK;
            pMalloc->(Free(pid2));
        }
    }
    
    if (NULL != pMalloc && pid1 != NULL)
    {
        pMalloc->Free(pid1);
    }
    if (pMalloc != NULL)
    {
        pMalloc->Release();
    }
Done:
    CoUninitialize();
    return ret;
}

CString CPathDialog::GetPathName() const
{
    return m_szPathName;
}

int CALLBACK CPathDialog::BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData)
{
    TCHAR szPath[MAX_PATH] = {'\0'};
    switch (uMsg)
    {
    case BFFM_INITIALIZED:
        PostMessage(hwnd, BFFM_SETSELECTION, (WPARAM)1, (LPARAM)lpData);
        break;
    case BFFM_SELCHANGED:
        ::SHGetPathFromIDList((LPITEMIDLIST)lParam, szPath);
        SendMessage(hwnd, BFFM_SETSTATUSTEXT, 0L, (LPARAM)szPath);
        break;
    default:
        break;
    }
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Cadence中,封装路径是用来存放元器件封装信息的。根据引用和引用[2]的内容,可以得知Cadence的封装路径包括三个重要选项:padpath(焊盘路径)、psmpath(Footprint路径)和steppath(3D封装路径)。 要设置Cadence的封装路径,需要进行以下步骤: 1. 打开User Preferences Editor对话框。 2. 在对话框选择"paths"选项。 3. 点击"library"选项,右侧将显示各种库路径选项。 4. 确定padpath、psmpath和steppath的路径。 5. 点击对应路径后面的对话框,弹出添加文件夹设置的窗口。 6. 将存放封装文件的路径添加到相应的路径设置中。 通过以上步骤,你就可以设置Cadence的封装路径,方便在绘制PCB时直接调用相应的元器件封装信息。详细的操作和界面显示可以参考引用和引用提供的图示。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Cadence Allegro PCB设计88问解析(十四) 之 Allegro中库路径设置方法](https://blog.csdn.net/tianpu2320959696/article/details/128573631)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [常用器件封装库Allegro.7z](https://download.csdn.net/download/donglinjs/12376458)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值