Listbox notif clics (win32, non mfc)

Soyez le premier à donner votre avis sur cette source.

Vue 4 397 fois - Téléchargée 366 fois

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

Ajouter un commentaire Commentaires
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Desole VieuxLion mais fonctionne parfait suivant MON cahier des charges qui precise: notif clic gauche SEULEMENT SI sur zone vide de la listbox. Le clic gauche est toujours retransmis a defproc donc n'empeche pas la selection ou autre.
ciao...
Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
8
ouais, le sous classement est très impressionnant !
il serait meilleur de retirer la condition sous
case WM_LBUTTONDOWN:
if (...)
qui empêche le clic gauche de fonctionner.
Ton intention ?

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.