/* Bind values to variables in the current scope according to the format of the argument list */ void BindArguments(ArgList arguments, VyObj values[], int num_args){ int i; for(i = 0; i < num_args; i++){ Param cur = arguments.params[i]; /* Normal arguments can just be bound right away */ if(!cur.rest){ VariableBind(cur.name, values[i]); } else { VyObj list = Nil(); int j; for(j = num_args - 1; j >= i; j--) list = Cons(values[j], list); VariableBind(cur.name, list); i = num_args; } } /* Finish filling in arguments that weren't passed */ for(; i < arguments.num_params; i++){ Param cur = arguments.params[i]; if(cur.rest) VariableBind(cur.name, Nil()); else { if(IsNone(cur.default_value)) cur.default_value = Nil(); VariableBind(cur.name, cur.default_value); } } }
const WCHAR *Doc::GetFilePath() const { if (filePath) { // verify it's consistent with the path in the doc const WCHAR *docPath = GetFilePathFromDoc(); CrashIf(docPath && !str::Eq(filePath, docPath)); return filePath; } CrashIf(!generic && !IsNone()); return GetFilePathFromDoc(); }
// return true if this is document supported by ebook UI bool Doc::IsEbook() const { switch (type) { case Doc_Epub: case Doc_Fb2: case Doc_Mobi: case Doc_MobiTest: return true; default: CrashIf(!IsEngine() && !IsNone()); return false; } }
bool Doc::IsEngine() const { switch (type) { case Engine_PDF: case Engine_XPS: case Engine_DjVu: case Engine_Image: case Engine_ImageDir: case Engine_ComicBook: case Engine_PS: case Engine_Chm: case Engine_Epub: case Engine_Fb2: case Engine_Mobi: case Engine_Pdb: case Engine_Chm2: case Engine_Tcr: case Engine_Html: case Engine_Txt: return true; default: CrashIf(!IsEbook() && !IsNone()); return false; } }
void WTHRRecord::IsNone(bool value) { if(value) { DATA.value.weatherType &= ~ePleasant; DATA.value.weatherType &= ~eCloudy; DATA.value.weatherType &= ~eRainy; DATA.value.weatherType &= ~eSnow; } else if(IsNone()) { DATA.value.weatherType |= ePleasant; DATA.value.weatherType &= ~eCloudy; DATA.value.weatherType &= ~eRainy; DATA.value.weatherType &= ~eSnow; } }
static intptr_t WINAPI OFDProc(HANDLE hDlg,intptr_t Msg,intptr_t Param1,void* Param2) { OFDData *DlgParams=(OFDData *)Info.SendDlgMessage(hDlg,DM_GETDLGDATA,0,0); TCHAR newdir[MAX_PATH]; TCHAR newcurdir[MAX_PATH]; FarListGetItem item={sizeof(FarListGetItem)}; BOOL ItemPresent=FALSE; if (Msg==DN_CONTROLINPUT||Msg==DN_CLOSE) { item.ItemIndex=Info.SendDlgMessage(hDlg,DM_LISTGETCURPOS,0,0); ItemPresent=Info.SendDlgMessage(hDlg,DM_LISTGETITEM,0,&item); if(ItemPresent) { lstrcpy(newcurdir,DlgParams->curr_dir); lstrcat(newcurdir,DlgParams->names[item.ItemIndex].Text); } } switch(Msg) { case DN_CONTROLINPUT: { const INPUT_RECORD* record=(const INPUT_RECORD*)Param2; if(record->EventType==KEY_EVENT&&record->Event.KeyEvent.bKeyDown) { WORD Key=record->Event.KeyEvent.wVirtualKeyCode; wchar_t Char=FSF.LUpper(record->Event.KeyEvent.uChar.UnicodeChar); if((IsNone(record)&&Key==VK_RETURN)||(IsCtrl(record)&&Key==VK_RETURN)||(IsCtrl(record)&&Char=='\\')) { bool bRoot=(Char=='\\'); if(ItemPresent||bRoot) { if(bRoot||(item.Item.Flags&LIF_CHECKED&&IsNone(record))) { TCHAR *ptr,old_dir[MAX_PATH];//,buffer[MAX_PATH]; lstrcpy(old_dir,DlgParams->curr_dir); int Len=lstrlen(old_dir); if (bRoot) { *newdir=0; lstrcpy(newcurdir,_T("..")); } else { GetFullPathName(newcurdir,ArraySize(newdir),newdir,&ptr); FSF.AddEndSlash(newdir); } //MessageBox(NULL,old_dir,newcurdir,MB_OK); if (TryLoadDir(hDlg,DlgParams,newdir)) { if(!lstrcmp(newcurdir+(bRoot?0:Len),_T(".."))) { if(Len) { if (bRoot) { ptr=old_dir; for (; *ptr && *ptr!='\\'; ptr++) ; if (*ptr=='\\') ptr[1]=0; ptr=old_dir; } else { if(old_dir[Len-1]=='\\') old_dir[Len-1]=0; ptr=(TCHAR*)FSF.PointToName(old_dir); } FarListPos Pos={sizeof(FarListPos)}; FarListFind find={sizeof(FarListFind),0,ptr,LIFIND_EXACTMATCH}; Pos.SelectPos=Info.SendDlgMessage(hDlg,DM_LISTFINDSTRING,0,&find); Pos.TopPos=-1; if(Pos.SelectPos>=0) Info.SendDlgMessage(hDlg,DM_LISTSETCURPOS,0,&Pos); } } } return TRUE; } if(!(IsNone(record)&&Key==VK_RETURN)) { Info.SendDlgMessage(hDlg,DM_CLOSE,0,0); return TRUE; } return FALSE; } else return TRUE; } else if(IsShift(record)&&Key==VK_RETURN) { if(ItemPresent) { SHELLEXECUTEINFO info; ZeroMemory(&info,sizeof(info)); info.cbSize=sizeof(info); info.fMask=SEE_MASK_NOCLOSEPROCESS|SEE_MASK_FLAG_DDEWAIT; info.lpFile=newcurdir; info.nShow=SW_SHOWNORMAL; ShellExecuteEx(&info); } return TRUE; } else if(IsAlt(record)&&Char>='A'&&Char<='Z') { int Drive=Char-'A'; DWORD Disks=GetLogicalDrives(); if(Disks&(1<<Drive)) { TCHAR temp_dir[3]=_T("A:"),*fileptr; temp_dir[0]=(TCHAR)(temp_dir[0]+Drive); if(!GetFullPathName(temp_dir,ArraySize(newdir),newdir,&fileptr)) lstrcpy(newdir,temp_dir); FSF.AddEndSlash(newdir); TryLoadDir(hDlg,DlgParams,newdir); } return TRUE; } else if(IsRCtrl(record)&&Char>='0'&&Char<='9') { FarSettingsCreate settings={sizeof(FarSettingsCreate),FarGuid,INVALID_HANDLE_VALUE}; HANDLE Settings=Info.SettingsControl(INVALID_HANDLE_VALUE,SCTL_CREATE,0,&settings)?settings.Handle:0; if(Settings) { FarSettingsEnum enums={sizeof(FarSettingsEnum),0,0,{0}}; enums.Root=FSSF_FOLDERSHORTCUT_0+Char-'0'; if(Info.SettingsControl(Settings,SCTL_ENUM,0,&enums)&&enums.Count>0) { intptr_t menu_id=-1; if (enums.Count==1) { menu_id=0; } else { FarMenuItem *menuElements=(FarMenuItem *)malloc(enums.Count*sizeof(FarMenuItem)); for(size_t ii=0;ii<enums.Count;ii++) { menuElements[ii].Text=enums.Histories[ii].Name; menuElements[ii].Flags=0; } menu_id=Info.Menu(&MainGuid,&ShortcutMenuDiag,-1,-1,0,FMENU_WRAPMODE,GetMsg(mFolderShortcut),0,NULL,NULL,NULL,menuElements,enums.Count); free(menuElements); } if (menu_id!=-1) { lstrcpy(newdir,enums.Histories[menu_id].Name); FSF.AddEndSlash(newdir); TryLoadDir(hDlg,DlgParams,newdir); } } Info.SettingsControl(Settings,SCTL_FREE,0,0); } return TRUE; } else if(IsNone(record)&&Key==VK_LEFT) { INPUT_RECORD keyOut={0}; keyOut.EventType=KEY_EVENT; keyOut.Event.KeyEvent.bKeyDown=1; keyOut.Event.KeyEvent.wRepeatCount=1; keyOut.Event.KeyEvent.wVirtualKeyCode=VK_HOME; Info.SendDlgMessage(hDlg,DM_KEY,1,&keyOut); return TRUE; } else if(IsNone(record)&&Key==VK_RIGHT) { INPUT_RECORD keyOut={0}; keyOut.EventType=KEY_EVENT; keyOut.Event.KeyEvent.bKeyDown=1; keyOut.Event.KeyEvent.wRepeatCount=1; keyOut.Event.KeyEvent.wVirtualKeyCode=VK_END; Info.SendDlgMessage(hDlg,DM_KEY,1,&keyOut); return TRUE; } } } break; case DN_CTLCOLORDIALOG: Info.AdvControl(&MainGuid,ACTL_GETCOLOR,COL_MENUTEXT, Param2); return true; case DN_CTLCOLORDLGLIST: if(Param1==0) { FarDialogItemColors *fdic=(FarDialogItemColors *)Param2; FarColor *Colors = fdic->Colors; int ColorIndex[]={COL_MENUTEXT,COL_MENUTEXT,COL_MENUTITLE,COL_MENUTEXT,COL_MENUHIGHLIGHT,COL_MENUTEXT,COL_MENUSELECTEDTEXT,COL_MENUSELECTEDHIGHLIGHT,COL_MENUSCROLLBAR,COL_MENUDISABLEDTEXT}; size_t Count=sizeof(ColorIndex)/sizeof(ColorIndex[0]); if(Count>fdic->ColorsCount) Count=fdic->ColorsCount; for(size_t i=0;i<Count;i++) { FarColor fc; if (Info.AdvControl(&MainGuid, ACTL_GETCOLOR, ColorIndex[i],&fc)) { Colors[i] = fc; } } return TRUE; } break; case DN_INITDIALOG: Info.SendDlgMessage(hDlg,DM_UPDATESIZE,0,0); TryLoadDir(hDlg,(OFDData *)Param2,((OFDData *)Param2)->curr_dir); break; case DN_HELP: Info.ShowHelp(Info.ModuleName,_T("FileDialog"),FHELP_SELFHELP); return (long)NULL; case DN_CLOSE: { if((Param1==0)&&ItemPresent) { lstrcpy(DlgParams->filename,DlgParams->curr_dir); if(lstrcmp(DlgParams->names[item.ItemIndex].Text,_T(".."))) lstrcat(DlgParams->filename,DlgParams->names[item.ItemIndex].Text); DlgParams->result=true; } if (DlgParams->names) { free(DlgParams->names); DlgParams->names=NULL; } } break; case DN_RESIZECONSOLE: Info.SendDlgMessage(hDlg,DM_UPDATESIZE,0,0); break; case DM_UPDATESIZE: { const int minimal_width=65,minimal_height=12; int width=minimal_width,height=minimal_height; HANDLE console=CreateFile(_T("CONOUT$"),GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL); if(console!=INVALID_HANDLE_VALUE) { COORD console_size={80,25}; SMALL_RECT console_rect; if(Info.AdvControl(&MainGuid,ACTL_GETFARRECT,0,&console_rect)) { console_size.X=console_rect.Right-console_rect.Left+1; console_size.Y=console_rect.Bottom-console_rect.Top+1; } width=console_size.X*3/5; if(width<minimal_width) width=minimal_width; height=console_size.Y*2/3; if(height<minimal_height) height=minimal_height; if(width>(console_size.X-11)) width=console_size.X-11; if(height>(console_size.Y-4)) height=console_size.Y-4; CloseHandle(console); } Info.SendDlgMessage(hDlg,DM_ENABLEREDRAW,FALSE,0); { //minimize listbox SMALL_RECT listbox_size={3,1,4,2}; Info.SendDlgMessage(hDlg,DM_SETITEMPOSITION,0,&listbox_size); } { //resize and move dialog COORD dialog_size={(short)(width+6),(short)(height+2)}; Info.SendDlgMessage(hDlg,DM_RESIZEDIALOG,0,&dialog_size); COORD position={-1,-1}; Info.SendDlgMessage(hDlg,DM_MOVEDIALOG,TRUE,&position); } { //resize listbox SMALL_RECT listbox_size={3,1,(short)(width+2),(short)(height)}; Info.SendDlgMessage(hDlg,DM_SETITEMPOSITION,0,&listbox_size); } Info.SendDlgMessage(hDlg,DM_ENABLEREDRAW,TRUE,0); } break; } return Info.DefDlgProc(hDlg,Msg,Param1,Param2); }
static intptr_t WINAPI MainDialogProc(HANDLE hDlg,intptr_t Msg,intptr_t Param1,void* Param2) { BoardParams* DlgParams=(BoardParams*)Info.SendDlgMessage(hDlg,DM_GETDLGDATA,0,0); //if(Msg==DN_KEY&&Param2==KEY_ENTER) return TRUE; switch(Msg) { case DN_INITDIALOG: Info.SendDlgMessage(hDlg,DM_RESETBOARD,0,0); SetFocus(true); break; case DN_CONTROLINPUT: { const INPUT_RECORD* record=(const INPUT_RECORD*)Param2; if(record->EventType==KEY_EVENT&&record->Event.KeyEvent.bKeyDown) { KillFocus(); if(IsNone(record)) { switch(record->Event.KeyEvent.wVirtualKeyCode) { case VK_UP: DlgParams->curr_col--; break; case VK_DOWN: DlgParams->curr_col++; break; case VK_LEFT: DlgParams->curr_row--; break; case VK_RIGHT: DlgParams->curr_row++; break; case VK_HOME: DlgParams->curr_row=0; break; case VK_END: DlgParams->curr_row=DlgParams->width-1; break; case VK_PRIOR: DlgParams->curr_col=0; break; case VK_NEXT: DlgParams->curr_col=DlgParams->height-1; break; case L' ': { Info.SendDlgMessage(hDlg,DM_ENABLEREDRAW,FALSE,0); if(!DlgParams->finished) { if(!DlgParams->started) Info.SendDlgMessage(hDlg,DM_START_GAME,0,0); OpenPlace(hDlg,DlgParams,DlgParams->curr_row,DlgParams->curr_col,COP_CHECK_ALL); } Info.SendDlgMessage(hDlg,DM_ENABLEREDRAW,TRUE,0); } break; case VK_DELETE: { Info.SendDlgMessage(hDlg,DM_ENABLEREDRAW,FALSE,0); if(!DlgParams->finished) { FarDialogItem DialogItem; Info.SendDlgMessage(hDlg,DM_GETDLGITEMSHORT,DlgParams->width*DlgParams->curr_col+DlgParams->curr_row,&DialogItem); switch(GET_DATA_1(DialogItem)) { case STATE_CLOSE: SET_DATA_1(DialogItem,STATE_MARKED); DlgParams->curr_mines++; break; case STATE_OPEN: break; case STATE_MARKED: SET_DATA_1(DialogItem,STATE_CLOSE); DlgParams->curr_mines--; break; } Info.SendDlgMessage(hDlg,DM_SETDLGITEMSHORT,DlgParams->width*DlgParams->curr_col+DlgParams->curr_row,&DialogItem); Info.SendDlgMessage(hDlg,DM_SHOWTIME,0,0); } Info.SendDlgMessage(hDlg,DM_ENABLEREDRAW,TRUE,0); } break; case VK_F2: DlgParams->started=false; DlgParams->finished=FINISH_NO; Info.SendDlgMessage(hDlg,DM_SETTEXTPTR,DlgParams->width*DlgParams->height,const_cast<wchar_t*>(GetMsg(mStart))); Info.SendDlgMessage(hDlg,DM_RESETBOARD,0,0); break; case VK_F3: { wchar_t ScoreKeyName[1024],PlayerKeyName[1024]; FSF.sprintf(ScoreKeyName,L"Score_%d_%d_%d",DlgParams->width,DlgParams->height,DlgParams->mines); FSF.sprintf(PlayerKeyName,L"Player_%d_%d_%d",DlgParams->width,DlgParams->height,DlgParams->mines); CFarSettings settings(MainGuid); __int64 Score; wchar_t Name[512]; Score=settings.Get(ScoreKeyName,-1); if(!settings.Get(PlayerKeyName,Name,sizeofa(Name))) Name[0]=0; if(Score>=0&&Name[0]) { wchar_t buffer[1024]; FSF.sprintf(buffer,GetMsg(mHighscoreFormat),Name,(long)Score); const wchar_t* MsgItems[]={GetMsg(mHighscoreTitle),buffer,GetMsg(mOk)}; Info.Message(&MainGuid,&HiscoreGuid,0,NULL,MsgItems,sizeofa(MsgItems),1); } } break; } } if(DlgParams->curr_row>=DlgParams->width) DlgParams->curr_row=0; if(DlgParams->curr_row<0) DlgParams->curr_row=DlgParams->width-1; if(DlgParams->curr_col>=DlgParams->height) DlgParams->curr_col=0; if(DlgParams->curr_col<0) DlgParams->curr_col=DlgParams->height-1; SetFocus(true); Info.SendDlgMessage(hDlg,DM_REDRAW,0,0); } else if(record->EventType==MOUSE_EVENT) { DWORD Buttons=record->Event.MouseEvent.dwButtonState; if(Buttons&FROM_LEFT_1ST_BUTTON_PRESSED) RunKey(L"Keys([[Space]])"); else if(Buttons&RIGHTMOST_BUTTON_PRESSED) RunKey(L"Keys([[Del]])"); } } break; case DN_GOTFOCUS: SetFocus(false); break; case DN_KILLFOCUS: KillFocus(); break; case DM_RESETBOARD: { int curr_mines=DlgParams->mines,color; FarDialogItem DialogItem; Info.SendDlgMessage(hDlg,DM_ENABLEREDRAW,FALSE,0); for(int i=0;i<DlgParams->height;i++) for(int j=0;j<DlgParams->width;j++) { int k=i*DlgParams->width+j; Info.SendDlgMessage(hDlg,DM_GETDLGITEMSHORT,k,&DialogItem); SET_DATA_0(DialogItem,0); SET_DATA_1(DialogItem,0); color=0; DialogItem.VBuf[1].Char=GetChar(GET_DATA_0(DialogItem),GET_DATA_1(DialogItem),&color); int bgcolor=GetBG(i,j,STATE_CLOSE); DialogItem.VBuf[0].Attributes.ForegroundColor=DialogItem.VBuf[1].Attributes.ForegroundColor=DialogItem.VBuf[2].Attributes.ForegroundColor=color; DialogItem.VBuf[0].Attributes.BackgroundColor=DialogItem.VBuf[1].Attributes.BackgroundColor=DialogItem.VBuf[2].Attributes.BackgroundColor=bgcolor; Info.SendDlgMessage(hDlg,DM_SETDLGITEMSHORT,k,&DialogItem); } //set mines while(curr_mines) for(int i=0;i<DlgParams->height;i++) for(int j=0;j<DlgParams->width;j++) { int k=i*DlgParams->width+j; Info.SendDlgMessage(hDlg,DM_GETDLGITEMSHORT,k,&DialogItem); if(curr_mines&&(!GET_DATA_0(DialogItem))) { if(rand()<=(RAND_MAX*DlgParams->mines/(DlgParams->width*DlgParams->height))) { curr_mines--; SET_DATA_0(DialogItem,9); Info.SendDlgMessage(hDlg,DM_SETDLGITEMSHORT,k,&DialogItem); } } } //set places for(int i=0;i<DlgParams->height;i++) for(int j=0;j<DlgParams->width;j++) { int k=i*DlgParams->width+j; Info.SendDlgMessage(hDlg,DM_GETDLGITEMSHORT,k,&DialogItem); if(GET_DATA_0(DialogItem)==0) { SET_DATA_0(DialogItem,GET_DATA_0(DialogItem)+GetMine(j-1,i-1,hDlg,DlgParams,false)); SET_DATA_0(DialogItem,GET_DATA_0(DialogItem)+GetMine(j-1,i,hDlg,DlgParams,false)); SET_DATA_0(DialogItem,GET_DATA_0(DialogItem)+GetMine(j-1,i+1,hDlg,DlgParams,false)); SET_DATA_0(DialogItem,GET_DATA_0(DialogItem)+GetMine(j,i-1,hDlg,DlgParams,false)); SET_DATA_0(DialogItem,GET_DATA_0(DialogItem)+GetMine(j,i+1,hDlg,DlgParams,false)); SET_DATA_0(DialogItem,GET_DATA_0(DialogItem)+GetMine(j+1,i-1,hDlg,DlgParams,false)); SET_DATA_0(DialogItem,GET_DATA_0(DialogItem)+GetMine(j+1,i,hDlg,DlgParams,false)); SET_DATA_0(DialogItem,GET_DATA_0(DialogItem)+GetMine(j+1,i+1,hDlg,DlgParams,false)); Info.SendDlgMessage(hDlg,DM_SETDLGITEMSHORT,k,&DialogItem); } } DlgParams->curr_mines=0; Info.SendDlgMessage(hDlg,DM_SHOWTIME,0,0); Info.SendDlgMessage(hDlg,DM_ENABLEREDRAW,TRUE,0); } break; case DN_ENTERIDLE: Info.SendDlgMessage(hDlg,DM_SHOWTIME,0,0); break; case DM_SHOWTIME: { wchar_t buffer[1024]; DWORD diff_time=DlgParams->started?((DlgParams->finished?DlgParams->end_time:GetTickCount())-DlgParams->start_time)/1000:0; FSF.sprintf(buffer,GetMsg(mTime),diff_time,DlgParams->curr_mines); Info.SendDlgMessage(hDlg,DM_SETTEXTPTR,DlgParams->width*DlgParams->height+1,buffer); } break; case DM_START_GAME: Info.SendDlgMessage(hDlg,DM_SETTEXTPTR,DlgParams->width*DlgParams->height,const_cast<wchar_t*>(GetMsg(mGame))); DlgParams->started=true; DlgParams->start_time=GetTickCount(); break; } return Info.DefDlgProc(hDlg,Msg,Param1,Param2); }
static intptr_t WINAPI MainDialogProc(HANDLE hDlg,intptr_t Msg,intptr_t Param1,void* Param2) { switch(Msg) { case DN_INITDIALOG: Info.SendDlgMessage(hDlg,DM_LISTBOXEX_INIT,1,0); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("aaa")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("1 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("2 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("3 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("4 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("5 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("6 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("7 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("8 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("9 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("0 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("1 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("2 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("3 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("4 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("5 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("6 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("7 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("8 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("9 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("0 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("1 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("2 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("3 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("4 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("5 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("6 bbb")); Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("7 bbb")); { ListBoxExSetColor color={2,LISTBOXEX_COLORS_ITEM,0,{{FCF_FG_4BIT|FCF_BG_4BIT,0xC,0x7,NULL},0,false}}; for(int i=2;i<5;i++) { color.ColorIndex=i; Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ITEM_SETCOLOR,1,&color); } color.Color.Color.ForegroundColor=0xA; color.Color.Color.BackgroundColor=0x7; for(int i=7;i<10;i++) { color.ColorIndex=i; Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ITEM_SETCOLOR,1,&color); } color.Color.Color.ForegroundColor=0x9; color.Color.Color.BackgroundColor=0x7; for(int i=12;i<15;i++) { color.ColorIndex=i; Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ITEM_SETCOLOR,1,&color); } color.Color.Color.ForegroundColor=0x9; color.Color.Color.BackgroundColor=0x0; color.TypeIndex=LISTBOXEX_COLORS_SELECTED; for(int i=12;i<15;i++) { color.ColorIndex=i; Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ITEM_SETCOLOR,1,&color); } ListBoxExSetHotkey hotkey={16,'a'}; Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ITEM_SETHOTKEY,1,&hotkey); } break; case DN_CONTROLINPUT: { const INPUT_RECORD* record=(const INPUT_RECORD *)Param2; if(record->EventType==KEY_EVENT&&record->Event.KeyEvent.bKeyDown) { WORD vk=record->Event.KeyEvent.wVirtualKeyCode; if(IsNone(record)) { switch(vk) { case VK_DELETE: { FarListDelete list={sizeof(FarListDelete),3,4}; Info.SendDlgMessage(hDlg,DM_LISTBOXEX_DELETE,1,&list); } break; case VK_F2: { ListBoxExSetFlags flags={Info.SendDlgMessage(hDlg,DM_LISTBOXEX_GETCURPOS,1,0L),LIFEX_DISABLE}; Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ITEM_SETFLAGS,1,&flags); } break; case VK_F3: { ListBoxExSetFlags flags={Info.SendDlgMessage(hDlg,DM_LISTBOXEX_GETCURPOS,1,0L)-1,0}; Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ITEM_SETFLAGS,1,&flags); } break; case VK_INSERT: Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ITEM_TOGGLE,1,(void*)Info.SendDlgMessage(hDlg,DM_LISTBOXEX_GETCURPOS,1,0L)); break; } } else if(IsShift(record)) { switch(vk) { case VK_DELETE: { ListBoxExSetFlags flags={Info.SendDlgMessage(hDlg,DM_LISTBOXEX_GETCURPOS,1,0L),LIFEX_HIDDEN}; Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ITEM_SETFLAGS,1,&flags); } break; } } else if(IsCtrl(record)) { switch(vk) { case VK_UP: { FarListPos pos={sizeof(FarListPos),Info.SendDlgMessage(hDlg,DM_LISTBOXEX_GETCURPOS,1,0L),-1}; Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ITEM_MOVE_UP,1,(void*)(INT_PTR)pos.SelectPos); pos.SelectPos--; Info.SendDlgMessage(hDlg,DM_LISTBOXEX_SETCURPOS,1,&pos); } break; case VK_DOWN: { FarListPos pos={sizeof(FarListPos),Info.SendDlgMessage(hDlg,DM_LISTBOXEX_GETCURPOS,1,0L),-1}; Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ITEM_MOVE_DOWN,1,(void*)(INT_PTR)pos.SelectPos); pos.SelectPos++; Info.SendDlgMessage(hDlg,DM_LISTBOXEX_SETCURPOS,1,&pos); } break; } } } } break; case DN_CLOSE: Info.SendDlgMessage(hDlg,DM_LISTBOXEX_FREE,1,0); break; case DM_LISTBOXEX_ISLBE: if(Param1==1) return TRUE; return FALSE; } return ListBoxExDialogProc(hDlg,Msg,Param1,Param2); }