Listbox notif clics (win32, non mfc)

Description

Exemple de sous classement en reponse forum.
Tout dans zip pour recompiler.
Notifie fenetre parent des clics souris,
Gauche: SI sur zone vide alors (WM_USER+1)
Droite toujours dans WM_COMMAND(juste pour varier).

Source / Exemple :


#include <windows.h>
#include "resource.h"

#define LST_LCLIC (WM_USER+1)
#define LST_RCLIC 1000

WNDPROC lstProc;
char *szappname = "ListBox";

LRESULT CALLBACK lstNewProc(HWND hwnd, UINT mssg, WPARAM wParam, LPARAM lParam)
{
  switch(mssg) {
    case WM_LBUTTONDOWN:
      if(SendMessage(hwnd, LB_ITEMFROMPOINT, 0, lParam) > 0xFFFF)
        PostMessage(GetParent(hwnd), LST_LCLIC, 0, (long) hwnd);
      break;
    case WM_RBUTTONDOWN:
      PostMessage(GetParent(hwnd), WM_COMMAND, LST_RCLIC, (long) hwnd);
  }
  return CallWindowProc(lstProc, hwnd, mssg, wParam, lParam);
}

BOOL CALLBACK AppDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam)
{
  switch(mssg) {
    case LST_LCLIC:
      MessageBox(hdlg, "Clic gauche", szappname, 0);
      break;
    case WM_COMMAND:
      switch(wParam) {
        case LST_RCLIC:
          MessageBox(hdlg, "Clic droit", szappname, 0);
          break;
        case IDCANCEL: EndDialog(hdlg, wParam);
      }
      return 0;
    case WM_INITDIALOG:
      {
        HWND hlst;
        SetClassLong(hdlg, GCL_HICON, (long)LoadIcon(0, IDI_APPLICATION));
        hlst = GetDlgItem(hdlg, ID_LST);
        SendMessage(hlst, LB_ADDSTRING, 0, (long) szappname);
        SendMessage(hlst, LB_ADDSTRING, 0, (long) szappname);
        lstProc = (WNDPROC) SetWindowLong(hlst, GWL_WNDPROC, (long) lstNewProc);
        return TRUE;
      }
  }
  return 0;
}

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE, PSTR, int)
{
  DialogBox(hInstance, MAKEINTRESOURCE(IDD_APP), 0, AppDlgProc);
  return 0;
}

Conclusion :


C'est tout simple et facile a modifier.
Faire gaffe ne pas dupliquer ID de controles.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.