15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Help with 'Could not find splitter cursor .....'

Daniel Keller dkeller@psln1.psln.com -- dkeller@psln.com
Thursday, June 13, 1996

[Watcom C/C++ v10.6 - Win95 - MFC v3.2]
Hi,
My app uses a splitter window, if I compile it to use the MFC DLLs it
works fine, but if I compile it to run alone it displays the cursor  
arrows pointing right and left (<--->), when I debug I it just says "Could
not find splitter cursor - using system provided alternative. I have no
Idea what is causing this. I have included my code.

I also have a question about my code that is not directly related to MFC:
at one point it is supposed to display a browse for folder dialog (by
calling SHBrowseForFolder) but it never displays the dialog, at one point
I am supposed to call "g_pMalloc->lpVtbl->Alloc(g_pMalloc,MAX_PATH)" but
when I try to Compile this it says lpVtbl has not been declared so I
changed it to "g_pMalloc->Alloc(MAX_PATH)". Any help on why this doesn't
work or why "lpVtbl has not been declared" would be greatly appreciated.
Thanks,
Daniel.
--

"Despite all my rage I am still just a rat in a cage."
       Billy Corgan of The Smashing Pumpkins          
------------------------------------------------------
dkeller@psln.com                                      
------------------------------------------------------

--- main.cpp

//I'm hot shure which files should be included

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "main.h"

/////////////////////////////////////////////////////////////////////////=
//
BEGIN_MESSAGE_MAP(CMainWindow,CFrameWnd)
    ON_COMMAND(FILE_OPEN,OnOpen)
    ON_COMMAND(FILE_EXIT,OnExit)
END_MESSAGE_MAP();
/////////////////////////////////////////////////////////////////////////=
//
CTheApp TheApp;
/////////////////////////////////////////////////////////////////////////=
//
IMPLEMENT_DYNCREATE(CListView,CWnd);
CListView::CListView()
{
    SetWindowLong(m_hWnd,GWL_STYLE,LVS_LIST);
    BrowseForFolder(m_hWnd);
}

LPITEMIDLIST CListView::GetNextItemID(LPITEMIDLIST pidl)
{
    int cb=3Dpidl->mkid.cb;
    if(cb=3D=3D0) return NULL;
    pidl=3D(LPITEMIDLIST) (((LPBYTE)pidl)+cb);
    return (pidl->mkid.cb=3D=3D0) ? NULL:pidl;
}

LPITEMIDLIST CListView::CopyItemID(LPITEMIDLIST pidl)
{
    int cb=3Dpidl->mkid.cb;
    LPITEMIDLIST =
pidlNew=3D(LPITEMIDLIST)g_pMalloc->Alloc(cb+sizeof(USHORT));
// ^^^^^^^^^^^ This should be
//  LPITEMIDLIST =
pidlNew=3D(LPITEMIDLIST)g_pMalloc->lpVtbl->Alloc(g_pMalloc,
//                        cb+sizeof(USHORT));
    if(pidlNew=3D=3DNULL) return NULL;
    CopyMemory(pidlNew,pidl,cb);
    *((USHORT *) (((LPBYTE)pidlNew)+cb))=3D0;
    return pidlNew;
}

CListView::BrowseForFolder(HWND hwnd)
{
    BROWSEINFO bi;
    LPSTR lpBuffer;
    LPITEMIDLIST pidlPrograms;
    LPITEMIDLIST pidlBrowse;
    if(SHGetMalloc(&g_pMalloc)<0) return NULL;
    if((lpBuffer=3D(LPSTR) g_pMalloc->Alloc(MAX_PATH))=3D=3DNULL)
       return NULL;
//^^^^^^^^^^^^^^^^^ this should be
//if((lpBuffer=3D(LPSTR)g_pMalloc->lpVtbl->Alloc(g_pMalloc,MAX_PATH))=3D=3D=
NULL)

    if(SHGetSpecialFolderLocation(hwnd,CSIDL_PROGRAMS,&pidlPrograms)<0)
    {
        g_pMalloc->Free(lpBuffer);
//^^^^^^^^^^^^^^^^ this should be
//      g_pMalloc->lpVtbl->Free(g_pMalloc,lpBuffer);
        return NULL;
    }=20
    return NULL;
}


IMPLEMENT_DYNCREATE(CMainWindow,CFrameWnd);
CMainWindow::CMainWindow()
{
    LoadFrame(MAIN_RESOURCES);
}

BOOL CMainWindow::OnCreateClient(LPCREATESTRUCT lpcs,
                                 CCreateContext* pContext)
{
    SplitterWnd.CreateStatic(this,1,2,WS_VSCROLL|WS_HSCROLL|WS_CHILD|
                             WS_VISIBLE);
    SplitterWnd.CreateView(0,0,RUNTIME_CLASS(CListView),
                            CSize(0,0),pContext);
    SplitterWnd.CreateView(0,1,RUNTIME_CLASS(CListView),
                            CSize(130,50),pContext);
    return TRUE;                       =20
}                          =20
                                        =20
void CMainWindow::OnOpen()
{
    CFileDialog cDlg(TRUE);
    char FileName[256];
    char Filter[256];
    int i;

    lstrcpy(Filter,"All files (*.*)|*.*|C Files (*.c)|*.c||");
    for(i=3D0;Filter[i]!=3D0;i++)
    {
        if(Filter[i]=3D=3D'|') Filter[i]=3D0;
    }

    FileName[0]=3D0;

    cDlg.m_ofn.lStructSize=3Dsizeof(OPENFILENAME);
    cDlg.m_ofn.hwndOwner=3DNULL;
    cDlg.m_ofn.hInstance=3DAfxGetInstanceHandle();
    cDlg.m_ofn.lpstrFilter=3DFilter;
    cDlg.m_ofn.lpstrFile=3D(LPSTR)FileName;
    cDlg.m_ofn.nMaxFile=3Dsizeof(FileName);
    =
cDlg.m_ofn.Flags=3DcDlg.m_ofn.Flags|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|
                     OFN_HIDEREADONLY|OFN_EXPLORER;
    if(cDlg.DoModal()!=3DIDOK) return;
}

void CMainWindow::OnExit()
{
    TheApp.m_pMainWnd->SendMessage(WM_CLOSE,0,0L);
}

BOOL CTheApp::InitInstance()
{
    Enable3dControls();
    m_pMainWnd=3Dnew CMainWindow;
    m_pMainWnd->ShowWindow(m_nCmdShow);
    m_pMainWnd->UpdateWindow();
    return TRUE;
}


--- main.h

#define MAIN_RESOURCES 110
#define FILE_OPEN 120       
#define FILE_EXIT 121

class CListView: public CWnd
{
    public:
    LPMALLOC g_pMalloc;
    LPITEMIDLIST GetNextItemID(LPITEMIDLIST pidl);
    LPITEMIDLIST CopyItemID(LPITEMIDLIST pidl);
    DECLARE_DYNCREATE(CListView);
    CListView();
    BrowseForFolder(HWND hwnd);
};

class CMainWindow: public CFrameWnd
{
    public:
    DECLARE_DYNCREATE(CMainWindow);
    CSplitterWnd SplitterWnd;        
    CMainWindow();
    virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs,
                                CCreateContext* pContext);
    afx_msg void OnOpen();
    afx_msg void OnExit();
    DECLARE_MESSAGE_MAP()
};

class CTheApp: public CWinApp
{
    public:
    virtual BOOL InitInstance();
};




Mario Contestabile -- Mario_Contestabile.UOS__MTL@UOSMTL2.universal.com
Monday, June 17, 1996

>calling SHBrowseForFolder) but it never displays the dialog, at one point
>I am supposed to call "g_pMalloc->lpVtbl->Alloc(g_pMalloc,MAX_PATH)" but
>when I try to Compile this it says lpVtbl has not been declared so I
>changed it to "g_pMalloc->Alloc(MAX_PATH)". Any help on why this doesn't

Did you try 
LPMALLOC;
::SHGetMalloc(&pMalloc)

mcontest@universal.com




Sammi -- sigarashi@geographix.com
Tuesday, June 18, 1996

This happened to me too. Here's an answer.

In your application RC file, add this. You have to explicitly include 
"afxres.rc" when you are using a static MFC library.

---------------------------------------------------------------
#include "afxres.h" // <-I'm sure you have this already

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#include "afxres.rc"         // Standard components <- this has the
cursor you want so many other thangs.
#endif
---------------------------------------------------------------

>[Watcom C/C++ v10.6 - Win95 - MFC v3.2]
>Hi,
>My app uses a splitter window, if I compile it to use the MFC DLLs it
>works fine, but if I compile it to run alone it displays the cursor  
>arrows pointing right and left (<--->), when I debug I it just says
>"Could
>not find splitter cursor - using system provided alternative. I have no
>Idea what is causing this. I have included my code.
>
>I also have a question about my code that is not directly related to
>MFC:
>at one point it is supposed to display a browse for folder dialog (by
>calling SHBrowseForFolder) but it never displays the dialog, at one
>point
>I am supposed to call "g_pMalloc->lpVtbl->Alloc(g_pMalloc,MAX_PATH)"
>but
>when I try to Compile this it says lpVtbl has not been declared so I
>changed it to "g_pMalloc->Alloc(MAX_PATH)". Any help on why this
>doesn't
>work or why "lpVtbl has not been declared" would be greatly
>appreciated.
>Thanks,
>Daniel.
>--
>
>"Despite all my rage I am still just a rat in a cage."
>       Billy Corgan of The Smashing Pumpkins          
>------------------------------------------------------
>dkeller@psln.com                                      
>------------------------------------------------------
>
>--- main.cpp
>
>//I'm hot shure which files should be included
>
>#include 
>#include 
>#include 
>#include 
>#include 
>#include 
>#include 
>#include 
>#include 
>#include "main.h"
>
>////////////////////////////////////////////////////////////////////////
>/=
>//
>BEGIN_MESSAGE_MAP(CMainWindow,CFrameWnd)
>    ON_COMMAND(FILE_OPEN,OnOpen)
>    ON_COMMAND(FILE_EXIT,OnExit)
>END_MESSAGE_MAP();
>////////////////////////////////////////////////////////////////////////
>/=
>//
>CTheApp TheApp;
>////////////////////////////////////////////////////////////////////////
>/=
>//
>IMPLEMENT_DYNCREATE(CListView,CWnd);
>CListView::CListView()
>{
>    SetWindowLong(m_hWnd,GWL_STYLE,LVS_LIST);
>    BrowseForFolder(m_hWnd);
>}
>
>LPITEMIDLIST CListView::GetNextItemID(LPITEMIDLIST pidl)
>{
>    int cb=3Dpidl->mkid.cb;
>    if(cb=3D=3D0) return NULL;
>    pidl=3D(LPITEMIDLIST) (((LPBYTE)pidl)+cb);
>    return (pidl->mkid.cb=3D=3D0) ? NULL:pidl;
>}
>
>LPITEMIDLIST CListView::CopyItemID(LPITEMIDLIST pidl)
>{
>    int cb=3Dpidl->mkid.cb;
>    LPITEMIDLIST =
>pidlNew=3D(LPITEMIDLIST)g_pMalloc->Alloc(cb+sizeof(USHORT));
>// ^^^^^^^^^^^ This should be
>//  LPITEMIDLIST =
>pidlNew=3D(LPITEMIDLIST)g_pMalloc->lpVtbl->Alloc(g_pMalloc,
>//                        cb+sizeof(USHORT));
>    if(pidlNew=3D=3DNULL) return NULL;
>    CopyMemory(pidlNew,pidl,cb);
>    *((USHORT *) (((LPBYTE)pidlNew)+cb))=3D0;
>    return pidlNew;
>}
>
>CListView::BrowseForFolder(HWND hwnd)
>{
>    BROWSEINFO bi;
>    LPSTR lpBuffer;
>    LPITEMIDLIST pidlPrograms;
>    LPITEMIDLIST pidlBrowse;
>    if(SHGetMalloc(&g_pMalloc)<0) return NULL;
>    if((lpBuffer=3D(LPSTR) g_pMalloc->Alloc(MAX_PATH))=3D=3DNULL)
>       return NULL;
>//^^^^^^^^^^^^^^^^^ this should be
>//if((lpBuffer=3D(LPSTR)g_pMalloc->lpVtbl->Alloc(g_pMalloc,MAX_PATH))=3D
>=3D=
>NULL)
>
>    if(SHGetSpecialFolderLocation(hwnd,CSIDL_PROGRAMS,&pidlPrograms)<0)
>    {
>        g_pMalloc->Free(lpBuffer);
>//^^^^^^^^^^^^^^^^ this should be
>//      g_pMalloc->lpVtbl->Free(g_pMalloc,lpBuffer);
>        return NULL;
>    }=20
>    return NULL;
>}
>
>
>IMPLEMENT_DYNCREATE(CMainWindow,CFrameWnd);
>CMainWindow::CMainWindow()
>{
>    LoadFrame(MAIN_RESOURCES);
>}
>
>BOOL CMainWindow::OnCreateClient(LPCREATESTRUCT lpcs,
>                                 CCreateContext* pContext)
>{
>    SplitterWnd.CreateStatic(this,1,2,WS_VSCROLL|WS_HSCROLL|WS_CHILD|
>                             WS_VISIBLE);
>    SplitterWnd.CreateView(0,0,RUNTIME_CLASS(CListView),
>                            CSize(0,0),pContext);
>    SplitterWnd.CreateView(0,1,RUNTIME_CLASS(CListView),
>                            CSize(130,50),pContext);
>    return TRUE;                       =20
>}                          =20
>                                        =20
>void CMainWindow::OnOpen()
>{
>    CFileDialog cDlg(TRUE);
>    char FileName[256];
>    char Filter[256];
>    int i;
>
>    lstrcpy(Filter,"All files (*.*)|*.*|C Files (*.c)|*.c||");
>    for(i=3D0;Filter[i]!=3D0;i++)
>    {
>        if(Filter[i]=3D=3D'|') Filter[i]=3D0;
>    }
>
>    FileName[0]=3D0;
>
>    cDlg.m_ofn.lStructSize=3Dsizeof(OPENFILENAME);
>    cDlg.m_ofn.hwndOwner=3DNULL;
>    cDlg.m_ofn.hInstance=3DAfxGetInstanceHandle();
>    cDlg.m_ofn.lpstrFilter=3DFilter;
>    cDlg.m_ofn.lpstrFile=3D(LPSTR)FileName;
>    cDlg.m_ofn.nMaxFile=3Dsizeof(FileName);
>    =
>cDlg.m_ofn.Flags=3DcDlg.m_ofn.Flags|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|
>
>                     OFN_HIDEREADONLY|OFN_EXPLORER;
>    if(cDlg.DoModal()!=3DIDOK) return;
>}
>
>void CMainWindow::OnExit()
>{
>    TheApp.m_pMainWnd->SendMessage(WM_CLOSE,0,0L);
>}
>
>BOOL CTheApp::InitInstance()
>{
>    Enable3dControls();
>    m_pMainWnd=3Dnew CMainWindow;
>    m_pMainWnd->ShowWindow(m_nCmdShow);
>    m_pMainWnd->UpdateWindow();
>    return TRUE;
>}
>
>
>--- main.h
>
>#define MAIN_RESOURCES 110
>#define FILE_OPEN 120       
>#define FILE_EXIT 121
>
>class CListView: public CWnd
>{
>    public:
>    LPMALLOC g_pMalloc;
>    LPITEMIDLIST GetNextItemID(LPITEMIDLIST pidl);
>    LPITEMIDLIST CopyItemID(LPITEMIDLIST pidl);
>    DECLARE_DYNCREATE(CListView);
>    CListView();
>    BrowseForFolder(HWND hwnd);
>};
>
>class CMainWindow: public CFrameWnd
>{
>    public:
>    DECLARE_DYNCREATE(CMainWindow);
>    CSplitterWnd SplitterWnd;        
>    CMainWindow();
>    virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs,
>                                CCreateContext* pContext);
>    afx_msg void OnOpen();
>    afx_msg void OnExit();
>    DECLARE_MESSAGE_MAP()
>};
>
>class CTheApp: public CWinApp
>{
>    public:
>    virtual BOOL InitInstance();
>};
>
>




| Вернуться в корень Архива |