Autor Tema: Como se linka una libreria con Dev-cpp  (Leído 2810 veces)

Desconectado Asa

  • Newbie
  • *
  • Mensajes: 1
Como se linka una libreria con Dev-cpp
« en: 08 de Diciembre de 2004, 03:20:43 pm »
Necesito utilizar la funcion SHBrowseForFolder y para ello necesito linkar a mi programa la libreria comdlg32.lib Llevo varios dias intentándolo pero no lo consigo. Agradeceria mucho que alguien me echara una mano diciendome detalladamente como se debe de hacer. Gracias.

Desconectado ALP

  • Member
  • ***
  • Mensajes: 234
funcion SHBrowseForFolder...
« Respuesta #1 en: 11 de Diciembre de 2004, 01:08:29 am »
Hola. Te pongo un ejemplo de como utilizar la función:
Código: [Seleccionar]
#include <windows.h>
#include <shlobj.h>


int CALLBACK FuncionAuxiliar(HWND,UINT,LPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
{

BROWSEINFO brw={0};
   LPITEMIDLIST idList;
LPMALLOC ppMalloc=NULL;
char Directorio[MAX_PATH]={0};
   char *DirInicial = "C:\\Archivos de programa";

SHGetMalloc(&ppMalloc);
brw.hwndOwner=NULL; // No tenemos ventana padre
brw.lpszTitle="Selecciona una carpeta";

   // Utilizamos la función auxiliar para seleccionar un directorio inicial
   brw.lpfn=(BFFCALLBACK)FuncionAuxiliar;
brw.lParam = (LPARAM)DirInicial;

idList = SHBrowseForFolder(&brw);
if (idList) {
SHGetPathFromIDList(idList,Directorio);
if (ppMalloc)
ppMalloc->Free(idList);
      MessageBox(NULL, Directorio,"Carpeta seleccionada", MB_ICONINFORMATION|MB_OK);
   }
   else
    MessageBox(NULL, "Cancelado por el usuario", "Aviso", MB_OK);

return 0;
}


int CALLBACK FuncionAuxiliar(HWND hWnd,UINT messg,LPARAM lParam,LPARAM  lpData)
{
   switch(messg)
    {
      case BFFM_INITIALIZED:
         if (lpData)
          SendMessage(hWnd,BFFM_SETSELECTION,1,lpData);
      break;
    }
   return 0;
}



La función auxiliar no es obligatorio utilizarla, pero la puedes utilizar para muchas cosas, por ejemplo, permitir que sólo pueda seleccionar las carpetas que contengan determinados ficheros. Prueba a utilizar esta función auxiliar. Sólo te permitirá seleccionar las carpetas que contengan ficheros con la extensión "EXE".

Código: [Seleccionar]
int CALLBACK FuncionAuxiliar(HWND hWnd,UINT messg,LPARAM lParam,LPARAM  lpData)
{
   switch(messg)
    {
      case BFFM_INITIALIZED:
         if (lpData)
          SendMessage(hWnd,BFFM_SETSELECTION,1,lpData);
      break;
case BFFM_SELCHANGED:
      if (lParam)
          {
          HANDLE handle;
      char dir[MAX_PATH]={0};
    WIN32_FIND_DATA fd={0};
        SHGetPathFromIDList((LPITEMIDLIST)lParam,dir);

         if (dir[lstrlen(dir)-1]=='\\')
        dir[lstrlen(dir)-1]='\0';

            strcat(dir,"\\*.EXE");

            handle = FindFirstFile(dir,&fd);
          if (handle==INVALID_HANDLE_VALUE)
        SendMessage(hWnd,BFFM_ENABLEOK,0,0);
            else
         {
          FindClose(handle);
      SendMessage(hWnd,BFFM_ENABLEOK,1,1);
             }
          }
      break;
    }
  return 0;
}


No lo he documentado porque en la ayuda lo encontrarás todo bien detallado. Si tienes alguna duda, aquí estamos.

Un saludo.
Si no puedes deslumbrar con tu sabiduría, desconcierta con tus gilipolleces.

 

Aviso Legal | Política de Privacidad | Política de Cookies

el contenido de la web se rige bajo licencia
Creative Commons License