/***************************************************************************** PROGRAM: DaDTest.c PURPOSE: Malliohjelma Drag- and Drop käytöstä Asiakas toiminnot (client, vastaanottaa pudotuksia) merkitty dadc Palvelin (server) on merkitty dads Editor: Vesa Lappalainen typistänyt malliohjelmista. PROJECT: dadtest.c, dadtest.def ALI\tabhand.c, ALI\dropfile.c, ALI\clipboard.c, ALI\mjonot.c, ALI\dropfile.rc *****************************************************************************/ #include #include #include /* Drag and Drop, ks. BC esx. DragDrop */ /* dadc */ #include "dropfile.h" /* dads */ #include "tabhand.h" #define ID_LISTBOX 100 #define MAX_FILES 20 static char FileStr[MAX_FILES+1][40] = { "Vedä tiedostoja FileManagerista tai", "WinCD:stä ja pudota tähän.", "Maalaa sitten haluamasi ja vedä", "ne vaikka WinCDhen!", "Oikea näppäin antaa valita dialogista", "ja keskinäppäin tyhjentää näytön", ""}; /****************************************************************************/ TblClassSWindowMAIN("DADWClass",NULL,"Drag and Drop",MsgTbl,0); /****************************************************************************/ /****************************************************************************/ int TakeFiles(HDROP hDrop) { int i,n = min(DragQueryFile(hDrop,-1,NULL,0),MAX_FILES); /* Nimien määrä */ for (i=0; ihWnd,(HMENU)ID_LISTBOX, GetWindowInstance(msg->hWnd),NULL); MoveWindow(msg->hWnd,10,10,320,400,FALSE); SET_NOTIFYDRAG(lhWnd); /* dads */ DragAcceptFiles(msg->hWnd,TRUE); /* dadc */ return 0; } static EVENT WM_paint(tMSGParam *msg) /* # MAKE_DC # */ { int i,y = 250; int dy = HIWORD(GetTextExtent(msg->hDC,"X",1)); for (i=0; FileStr[i][0]; i++) TextOut(msg->hDC, 10, y+=dy, FileStr[i],strlen(FileStr[i])); return 0; } static EVENT WM_dropfiles(tMSGParam *msg) /* dadc */ { #if 0 /* Laita tähän 1,jos haluat tiedostojen nimet itse ikkunaan */ TakeFiles((HDROP)msg->wParam); /* Oma funktio nimien ottamiseksi */ InvalidateRect(msg->hWnd,NULL,TRUE); /* Huono tapa,mutta sopii lyhyeen mal*/ #else DropFilesToListBox((HDROP)msg->wParam,msg->hWnd,100,0); #endif return 0; } static EVENT WM_mbuttondown(tMSGParam *msg) { (void)ListBox_ResetContent(GetDlgItem(msg->hWnd,ID_LISTBOX)); return 0; } static EVENT WM_lbuttondown(tMSGParam *msg) /* dads */ { DropListBoxFiles(msg->hWnd,ID_LISTBOX,""); return 0; } static EVENT WM_rbuttondown(tMSGParam *msg) /* dads */ { DropSelectFiles(msg->hWnd); return 0; } static EVENT WM_destroy(tMSGParam *msg) { DragAcceptFiles(msg->hWnd,FALSE); /* dadc */ PostQuitMessage(0); return 0; } /****************************************************************************/ /* Viestien käsittelytaulukko */ /****************************************************************************/ tMSGEntry MsgTbl[] = { EV_HANDLE_WM_DESTROY, { WM_BEGINDRAG , DoC , DoC , WM_lbuttondown }, /* dads */ { WM_CREATE , DoC , DoC , WM_create }, /*a*/ { WM_DROPFILES , DoC , DoC , WM_dropfiles }, /*a*/ { WM_PAINT , DoC , DoC , WM_paint, MAKE_DC }, /*a*/ { WM_MBUTTONDOWN , DoC , DoC , WM_mbuttondown }, /*a*/ { WM_LBUTTONDOWN , DoC , DoC , WM_lbuttondown }, /*a*/ { WM_RBUTTONDOWN , DoC , DoC , WM_rbuttondown }, /*a*/ { WM_DESTROY , DoC , DoC , WM_destroy }, /*a*/ { 0 } }; /****************************************************************************/