📄 rdproc.c
字号:
case WM_COMPAREITEM:
{
COMPAREITEMSTRUCT *comp;
PUSERKEYINFO pui1,pui2;
HWND hwndFrom;
comp=(COMPAREITEMSTRUCT *)lParam;
pui1=(PUSERKEYINFO)comp->itemData1;
pui2=(PUSERKEYINFO)comp->itemData2;
hwndFrom=comp->hwndItem;
return ListViewCompareProc((LPARAM)pui1,
(LPARAM)pui2,
(LPARAM)hwndFrom);
}
#endif
case WM_SIZE:
{
ResizeEm(hdlg);
break;
}
#if !LISTBOX
#define ptrNMHDR ((LPNMHDR)lParam)
#define ptrNM_LISTVIEW ((NM_LISTVIEW *)lParam)
#define ptrTV_DISPINFO ((TV_DISPINFO *)lParam)
case WM_NOTIFY:
{
switch (ptrNMHDR->code)
{
case LVN_BEGINDRAG: // Sent by ListView when user
{ // wants to drag an item.
int dx,dy,left,bottom,result;
POINT pnt;
PRECGBL prg;
prg=(PRECGBL)GetWindowLong(hdlg,GWL_USERDATA);
prg->hwndDragFrom = ptrNMHDR->hwndFrom;
if(!ListView_GetSelectedCount(prg->hwndDragFrom))
{
break; // Exit if not
}
result=ImageList_DragShowNolock(FALSE);
prg->hDragImage=
MakeDragImage(prg->hwndDragFrom,
&left,&bottom);
SetCapture(hdlg);
pnt.x=((NM_LISTVIEW *)lParam)->ptAction.x;
pnt.y=((NM_LISTVIEW *)lParam)->ptAction.y;
dx=pnt.x-left;
dy=pnt.y-bottom;
result=ImageList_BeginDrag(prg->hDragImage,
0,dx,dy);
MapWindowPoints(prg->hwndDragFrom,hdlg,
(LPPOINT)&pnt,(UINT)1);
ImageList_DragEnter(hdlg,pnt.x,pnt.y);
result=ImageList_DragShowNolock(TRUE);
prg->bDragging = TRUE;
break;
}
case LVN_COLUMNCLICK: // Sent by ListView when user
{ // clicks header control
int *SortSub;
BOOL *SortAscending;
PRECGBL prg;
prg=(PRECGBL)GetWindowLong(hdlg,GWL_USERDATA);
if(ptrNMHDR->hwndFrom==prg->hwndRecipients)
{
SortSub=&(prg->RSortSub);
SortAscending=&(prg->RSortAscending);
}
else
{
SortSub=&(prg->USortSub);
SortAscending=&(prg->USortAscending);
}
if(*SortSub==ptrNM_LISTVIEW->iSubItem)
{
*SortAscending=!(*SortAscending);
}
else
{
*SortAscending=TRUE;
*SortSub=ptrNM_LISTVIEW->iSubItem;
}
SortEm(ptrNMHDR->hwndFrom);
break;
}
}// switch
break;
} // case
#endif // !LISTBOX
case WM_SYSCOLORCHANGE:
{
PRECGBL prg;
prg=(PRECGBL)GetWindowLong(hdlg,GWL_USERDATA);
DeleteDrawElements(&(prg->ds));
CreateDrawElements(prg->context,&(prg->ds));
SendMessage(prg->hwndRecipients,
WM_SYSCOLORCHANGE,0,0);
SendMessage(prg->hwndUserIDs,
WM_SYSCOLORCHANGE,0,0);
break;
}
case WM_DRAWITEM:
{
Main_OnDrawItem(hdlg,(LPDRAWITEMSTRUCT) lParam);
return TRUE;
}
case WM_MEASUREITEM:
Main_OnMeasureItem(hdlg,(LPMEASUREITEMSTRUCT) lParam);
return TRUE;
case WM_HELP:
{
char szHelpFile[MAX_PATH+1];
GetHelpDir(szHelpFile);
WinHelp (((LPHELPINFO) lParam)->hItemHandle, szHelpFile,
HELP_WM_HELP, (DWORD) (LPSTR) aIds);
break;
}
// Note, ListView's context are done through subclass
case WM_CONTEXTMENU:
{
char szHelpFile[MAX_PATH+1];
GetHelpDir(szHelpFile);
WinHelp ((HWND) wParam, szHelpFile, HELP_CONTEXTMENU,
(DWORD) (LPVOID) aIds);
break;
}
#if !LISTBOX
case WM_MOUSEMOVE:
{
PRECGBL prg;
prg=(PRECGBL)GetWindowLong(hdlg,GWL_USERDATA);
if (prg->bDragging)
{
int result;
// drag the item to the current mouse position
result=ImageList_DragMove(LOWORD(lParam),
HIWORD(lParam));
}
break;
}
case WM_LBUTTONUP:
{
PRECGBL prg;
prg=(PRECGBL)GetWindowLong(hdlg,GWL_USERDATA);
if (prg->bDragging)
{
HWND hwndTarget; // window under mouse
POINT pt;
int result;
// Release the mouse capture
ReleaseCapture();
// Clear the drag flag
prg->bDragging = FALSE;
result=ImageList_DragShowNolock(FALSE);
ImageList_DragLeave(hdlg);
ImageList_EndDrag();
ImageList_Destroy(prg->hDragImage);
pt.x = LOWORD(lParam); // horizontal position of cursor
pt.y = HIWORD(lParam); // vertical position of cursor
ClientToScreen (hdlg, &pt);
// First, check to see if there is a valid drop point.
hwndTarget = WindowFromPoint( pt );
// make sure everything is going in the right direction
if(((hwndTarget == prg->hwndRecipients) ||
(hwndTarget == prg->hwndUserIDs))
&& (hwndTarget != prg->hwndDragFrom))
{
MoveListViewItems(prg->hwndRecipients,prg->hwndUserIDs,
prg->hwndDragFrom==prg->hwndRecipients);
}
}
break;
}
#endif // !LISTBOX
case WM_COMMAND:
{
switch(wParam)
{
case IDOK:
{
PRECGBL prg;
prg=(PRECGBL)GetWindowLong(hdlg,GWL_USERDATA);
SaveOptionSettings(prg->hwndOptions);
EndDialog(hdlg, TRUE);
break;
}
case IDCANCEL:
{
EndDialog(hdlg, FALSE);
break;
}
case IDHELP:
{
char szHelpFile[MAX_PATH+1];
GetHelpDir(szHelpFile);
WinHelp (hdlg, szHelpFile, HELP_CONTEXT,
IDH_IDD_RECIPIENTDLG);
break;
}
}
return TRUE;
}
}
return FALSE;
}
/*__Editor_settings____
Local Variables:
tab-width: 4
End:
vi: ts=4 sw=4
vim: si
_____________________*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -