Bonjour, j'ai lu un article sur code Project intitulé "Windows Ribbon Framework in Win32 C Application"
https://www.codeproject.com/Articles...-C-Application
de Stephen Wiria , l'auteur devais faire une suite mais ça n'est jamais arrivé , j'ai fait des recherche de code intensives sans résultat aussi , je me demandais
si qqu parmi vous pourrais me débloquer,
dans la fonction OnViewChanged de l'interface IUIFramework j'essaie d'obtenir la hauteur du ruban quand il est redimmenssionné :
IUIFramework* g_pFramework = NULL; // Reference to the Ribbon framework.
// {C4A4BB67-4FB2-4374-8726-4D8643555820}
DEFINE_GUID(IID_IUIRibbon,0xc4a4bb67, 0x4fb2, 0x4374, 0x87, 0x26, 0x4d, 0x86, 0x43, 0x55, 0x58, 0x20); //généré par le créateur de guid de VIsual c++
HRESULT STDMETHODCALLTYPE OnViewChanged(IUIApplication* This, UINT32 viewId, UI_VIEWTYPE typeID, IUnknown* view, UI_VIEWVERB verb, INT32 uReasonCode){
IUIRibbon* mon_ribbon = NULL;
INT32 the_height;
char* buffer[100];
switch (verb)
{
case UI_VIEWVERB_CREATE:
mon_ribbon = (IUIRibbon*)GlobalAlloc(GMEM_FIXED, sizeof(IUIRibbon));
hr = g_pFramework->lpVtbl->GetView(g_pFramework, 0, &IID_IUIRibbon, (void**)&mon_ribbon); // retourne E_INVALIDARG => IID_IUIRibbon serais invalide
switch (hr)
{
case S_OK: { MessageBox(GetForegroundWindow(), L"hresult", L"S_OK", MB_OK); }break;
case E_NOINTERFACE: { MessageBox(GetForegroundWindow(), L"hresult", L"E_NOINTERFACE", MB_OK); }break;
case E_POINTER: { MessageBox(GetForegroundWindow(), L"hresult", L"E_POINTER", MB_OK); }break;
case S_FALSE: { MessageBox(GetForegroundWindow(), L"hresult", L"S_FALSE", MB_OK); }break;
case E_NOTIMPL: { MessageBox(GetForegroundWindow(), L"hresult", L"E_NOTIMPL", MB_OK); }break;
case E_FAIL: { MessageBox(GetForegroundWindow(), L"hresult", L"E_FAIL", MB_OK); }break;
case E_UNEXPECTED: { MessageBox(GetForegroundWindow(), L"hresult", L"E_UNEXPECTED", MB_OK); }break;
case E_ABORT: { MessageBox(GetForegroundWindow(), L"hresult", L"E_ABORT", MB_OK); }break;
case E_ACCESSDENIED: { MessageBox(GetForegroundWindow(), L"hresult", L"E_ACCESSDENIED", MB_OK); }break;
case E_HANDLE: { MessageBox(GetForegroundWindow(), L"hresult", L"E_HANDLE", MB_OK); }break;
case E_INVALIDARG: { MessageBox(GetForegroundWindow(), L"hresult", L"E_INVALIDARG", MB_OK); }break;
case E_OUTOFMEMORY: { MessageBox(GetForegroundWindow(), L"hresult", L"E_OUTOFMEMORY", MB_OK); }break;
}
break;
case UI_VIEWVERB_DESTROY:
break;
case UI_VIEWVERB_SIZE:
mon_ribbon->lpVtbl->GetHeight(mon-ribbon,the_height) // provoque un crash
MessageBoxA(GetForegroundWindow(), "resultat", itoa((int)the_height, buffer, 10), MB_OK);
break;
}
return hr;
}
}
Le truc c'est que la fonction GetView ne me retourne pas d'interface IUIRibbon ça me retourne inlassablement E_INVALIDARG ce qui veut dire d'après microsoft learn que le GUID est invalide
tout les autres GUID sont généré de la même manière et marche tous sauf pour GetView.
je n'y connais pas grand chose en programmation com, je me base sur l'article et sur la doc en c++ par analogie pour essayer de continuer.
NB, le site "code project" est en remaniement mais vous pouvez retrouver l'article avec WAYBACK MAchinE, voila une bouteille à la mer, bonne fêtes.
Partager