12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764 |
- // Windows Template Library - WTL version 10.0
- // Copyright (C) Microsoft Corporation, WTL Team. All rights reserved.
- //
- // This file is a part of the Windows Template Library.
- // The use and distribution terms for this software are covered by the
- // Microsoft Public License (http://opensource.org/licenses/MS-PL)
- // which can be found in the file MS-PL.txt at the root folder.
- #ifndef __ATLCTRLS_H__
- #define __ATLCTRLS_H__
- #pragma once
- #ifndef __ATLAPP_H__
- #error atlctrls.h requires atlapp.h to be included first
- #endif
- #ifndef __ATLWIN_H__
- #error atlctrls.h requires atlwin.h to be included first
- #endif
- #include <richedit.h>
- #include <richole.h>
- #if (_RICHEDIT_VER < 0x0300)
- #error WTL10 requires _RICHEDIT_VER >= 0x0300
- #endif
- // protect template members from windowsx.h macros
- #ifdef _INC_WINDOWSX
- #undef GetNextSibling
- #undef GetPrevSibling
- #endif // _INC_WINDOWSX
- ///////////////////////////////////////////////////////////////////////////////
- // Classes in this file:
- //
- // CStaticT<TBase> - CStatic
- // CButtonT<TBase> - CButton
- // CListBoxT<TBase> - CListBox
- // CComboBoxT<TBase> - CComboBox
- // CEditT<TBase> - CEdit
- // CEditCommands<T>
- // CScrollBarT<TBase> - CScrollBar
- //
- // CImageListT<t_bManaged> - CImageList, CImageListManaged
- // CListViewCtrlT<TBase> - CListViewCtrl
- // CTreeViewCtrlT<TBase> - CTreeViewCtrl
- // CTreeItemT<TBase> - CTreeItem
- // CTreeViewCtrlExT<TBase> - CTreeViewCtrlEx
- // CHeaderCtrlT<TBase> - CHeaderCtrl
- // CToolBarCtrlT<TBase> - CToolBarCtrl
- // CStatusBarCtrlT<TBase> - CStatusBarCtrl
- // CTabCtrlT<TBase> - CTabCtrl
- // CToolInfo
- // CToolTipCtrlT<TBase> - CToolTipCtrl
- // CTrackBarCtrlT<TBase> - CTrackBarCtrl
- // CUpDownCtrlT<TBase> - CUpDownCtrl
- // CProgressBarCtrlT<TBase> - CProgressBarCtrl
- // CHotKeyCtrlT<TBase> - CHotKeyCtrl
- // CAnimateCtrlT<TBase> - CAnimateCtrl
- // CRichEditCtrlT<TBase> - CRichEditCtrl
- // CRichEditCommands<T>
- // CDragListBoxT<TBase> - CDragListBox
- // CDragListNotifyImpl<T>
- // CReBarCtrlT<TBase> - CReBarCtrl
- // CComboBoxExT<TBase> - CComboBoxEx
- // CDateTimePickerCtrlT<TBase> - CDateTimePickerCtrl
- // CMonthCalendarCtrlT<TBase> - CMonthCalendarCtrl
- // CFlatScrollBarImpl<T>
- // CFlatScrollBarT<TBase> - CFlatScrollBar
- // CIPAddressCtrlT<TBase> - CIPAddressCtrl
- // CPagerCtrlT<TBase> - CPagerCtrl
- // CLinkCtrlT<TBase> - CLinkCtrl
- //
- // CCustomDraw<T>
- namespace WTL
- {
- // These are wrapper classes for Windows standard and common controls.
- // To implement a window based on a control, use following:
- // Example: Implementing a window based on a list box
- //
- // class CMyListBox : CWindowImpl<CMyListBox, CListBox>
- // {
- // public:
- // BEGIN_MSG_MAP(CMyListBox)
- // // put your message handler entries here
- // END_MSG_MAP()
- // };
- // --- Standard Windows controls ---
- ///////////////////////////////////////////////////////////////////////////////
- // CStatic - client side for a Windows STATIC control
- template <class TBase>
- class CStaticT : public TBase
- {
- public:
- // Constructors
- CStaticT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CStaticT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Attributes
- static LPCTSTR GetWndClassName()
- {
- return _T("STATIC");
- }
- HICON GetIcon() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HICON)::SendMessage(this->m_hWnd, STM_GETICON, 0, 0L);
- }
- HICON SetIcon(HICON hIcon)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HICON)::SendMessage(this->m_hWnd, STM_SETICON, (WPARAM)hIcon, 0L);
- }
- HENHMETAFILE GetEnhMetaFile() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HENHMETAFILE)::SendMessage(this->m_hWnd, STM_GETIMAGE, IMAGE_ENHMETAFILE, 0L);
- }
- HENHMETAFILE SetEnhMetaFile(HENHMETAFILE hMetaFile)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HENHMETAFILE)::SendMessage(this->m_hWnd, STM_SETIMAGE, IMAGE_ENHMETAFILE, (LPARAM)hMetaFile);
- }
- CBitmapHandle GetBitmap() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CBitmapHandle((HBITMAP)::SendMessage(this->m_hWnd, STM_GETIMAGE, IMAGE_BITMAP, 0L));
- }
- CBitmapHandle SetBitmap(HBITMAP hBitmap)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CBitmapHandle((HBITMAP)::SendMessage(this->m_hWnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBitmap));
- }
- HCURSOR GetCursor() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HCURSOR)::SendMessage(this->m_hWnd, STM_GETIMAGE, IMAGE_CURSOR, 0L);
- }
- HCURSOR SetCursor(HCURSOR hCursor)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HCURSOR)::SendMessage(this->m_hWnd, STM_SETIMAGE, IMAGE_CURSOR, (LPARAM)hCursor);
- }
- };
- typedef CStaticT<ATL::CWindow> CStatic;
- ///////////////////////////////////////////////////////////////////////////////
- // CButton - client side for a Windows BUTTON control
- template <class TBase>
- class CButtonT : public TBase
- {
- public:
- // Constructors
- CButtonT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CButtonT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Attributes
- static LPCTSTR GetWndClassName()
- {
- return _T("BUTTON");
- }
- UINT GetState() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UINT)::SendMessage(this->m_hWnd, BM_GETSTATE, 0, 0L);
- }
- void SetState(BOOL bHighlight)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, BM_SETSTATE, bHighlight, 0L);
- }
- int GetCheck() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, BM_GETCHECK, 0, 0L);
- }
- void SetCheck(int nCheck)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, BM_SETCHECK, nCheck, 0L);
- }
- UINT GetButtonStyle() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UINT)::GetWindowLong(this->m_hWnd, GWL_STYLE) & 0xFFFF;
- }
- void SetButtonStyle(UINT nStyle, BOOL bRedraw = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, BM_SETSTYLE, nStyle, (LPARAM)bRedraw);
- }
- HICON GetIcon() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HICON)::SendMessage(this->m_hWnd, BM_GETIMAGE, IMAGE_ICON, 0L);
- }
- HICON SetIcon(HICON hIcon)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HICON)::SendMessage(this->m_hWnd, BM_SETIMAGE, IMAGE_ICON, (LPARAM)hIcon);
- }
- CBitmapHandle GetBitmap() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CBitmapHandle((HBITMAP)::SendMessage(this->m_hWnd, BM_GETIMAGE, IMAGE_BITMAP, 0L));
- }
- CBitmapHandle SetBitmap(HBITMAP hBitmap)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CBitmapHandle((HBITMAP)::SendMessage(this->m_hWnd, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBitmap));
- }
- BOOL GetIdealSize(LPSIZE lpSize) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, BCM_GETIDEALSIZE, 0, (LPARAM)lpSize);
- }
- BOOL GetImageList(PBUTTON_IMAGELIST pButtonImagelist) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, BCM_GETIMAGELIST, 0, (LPARAM)pButtonImagelist);
- }
- BOOL SetImageList(PBUTTON_IMAGELIST pButtonImagelist)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, BCM_SETIMAGELIST, 0, (LPARAM)pButtonImagelist);
- }
- BOOL GetTextMargin(LPRECT lpRect) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, BCM_GETTEXTMARGIN, 0, (LPARAM)lpRect);
- }
- BOOL SetTextMargin(LPRECT lpRect)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, BCM_SETTEXTMARGIN, 0, (LPARAM)lpRect);
- }
- #if (WINVER >= 0x0600)
- void SetDontClick(BOOL bDontClick)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, BM_SETDONTCLICK, (WPARAM)bDontClick, 0L);
- }
- #endif // (WINVER >= 0x0600)
- #if (_WIN32_WINNT >= 0x0600)
- BOOL SetDropDownState(BOOL bDropDown)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & (BS_SPLITBUTTON | BS_DEFSPLITBUTTON)) != 0);
- return (BOOL)::SendMessage(this->m_hWnd, BCM_SETDROPDOWNSTATE, (WPARAM)bDropDown, 0L);
- }
- BOOL GetSplitInfo(PBUTTON_SPLITINFO pSplitInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & (BS_SPLITBUTTON | BS_DEFSPLITBUTTON)) != 0);
- return (BOOL)::SendMessage(this->m_hWnd, BCM_GETSPLITINFO, 0, (LPARAM)pSplitInfo);
- }
- BOOL SetSplitInfo(PBUTTON_SPLITINFO pSplitInfo)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & (BS_SPLITBUTTON | BS_DEFSPLITBUTTON)) != 0);
- return (BOOL)::SendMessage(this->m_hWnd, BCM_SETSPLITINFO, 0, (LPARAM)pSplitInfo);
- }
- int GetNoteLength() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & (BS_COMMANDLINK | BS_DEFCOMMANDLINK)) != 0);
- return (int)::SendMessage(this->m_hWnd, BCM_GETNOTELENGTH, 0, 0L);
- }
- BOOL GetNote(LPWSTR lpstrNoteText, int cchNoteText) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & (BS_COMMANDLINK | BS_DEFCOMMANDLINK)) != 0);
- return (BOOL)::SendMessage(this->m_hWnd, BCM_GETNOTE, cchNoteText, (LPARAM)lpstrNoteText);
- }
- BOOL SetNote(LPCWSTR lpstrNoteText)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & (BS_COMMANDLINK | BS_DEFCOMMANDLINK)) != 0);
- return (BOOL)::SendMessage(this->m_hWnd, BCM_SETNOTE, 0, (LPARAM)lpstrNoteText);
- }
- LRESULT SetElevationRequiredState(BOOL bSet)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return ::SendMessage(this->m_hWnd, BCM_SETSHIELD, 0, (LPARAM)bSet);
- }
- #endif // (_WIN32_WINNT >= 0x0600)
- // Operations
- void Click()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, BM_CLICK, 0, 0L);
- }
- };
- typedef CButtonT<ATL::CWindow> CButton;
- ///////////////////////////////////////////////////////////////////////////////
- // CListBox - client side for a Windows LISTBOX control
- template <class TBase>
- class CListBoxT : public TBase
- {
- public:
- // Constructors
- CListBoxT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CListBoxT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Attributes
- static LPCTSTR GetWndClassName()
- {
- return _T("LISTBOX");
- }
- // for entire listbox
- int GetCount() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LB_GETCOUNT, 0, 0L);
- }
- int SetCount(int cItems)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(((this->GetStyle() & LBS_NODATA) != 0) && ((this->GetStyle() & LBS_HASSTRINGS) == 0));
- return (int)::SendMessage(this->m_hWnd, LB_SETCOUNT, cItems, 0L);
- }
- int GetHorizontalExtent() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LB_GETHORIZONTALEXTENT, 0, 0L);
- }
- void SetHorizontalExtent(int cxExtent)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, LB_SETHORIZONTALEXTENT, cxExtent, 0L);
- }
- int GetTopIndex() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LB_GETTOPINDEX, 0, 0L);
- }
- int SetTopIndex(int nIndex)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LB_SETTOPINDEX, nIndex, 0L);
- }
- LCID GetLocale() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (LCID)::SendMessage(this->m_hWnd, LB_GETLOCALE, 0, 0L);
- }
- LCID SetLocale(LCID nNewLocale)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (LCID)::SendMessage(this->m_hWnd, LB_SETLOCALE, (WPARAM)nNewLocale, 0L);
- }
- DWORD GetListBoxInfo() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, LB_GETLISTBOXINFO, 0, 0L);
- }
- // for single-selection listboxes
- int GetCurSel() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) == 0);
- return (int)::SendMessage(this->m_hWnd, LB_GETCURSEL, 0, 0L);
- }
- int SetCurSel(int nSelect)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) == 0);
- return (int)::SendMessage(this->m_hWnd, LB_SETCURSEL, nSelect, 0L);
- }
- // for multiple-selection listboxes
- int GetSel(int nIndex) const // also works for single-selection
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LB_GETSEL, nIndex, 0L);
- }
- int SetSel(int nIndex, BOOL bSelect = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) != 0);
- return (int)::SendMessage(this->m_hWnd, LB_SETSEL, bSelect, nIndex);
- }
- int GetSelCount() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) != 0);
- return (int)::SendMessage(this->m_hWnd, LB_GETSELCOUNT, 0, 0L);
- }
- int GetSelItems(int nMaxItems, LPINT rgIndex) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) != 0);
- return (int)::SendMessage(this->m_hWnd, LB_GETSELITEMS, nMaxItems, (LPARAM)rgIndex);
- }
- int GetAnchorIndex() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) != 0);
- return (int)::SendMessage(this->m_hWnd, LB_GETANCHORINDEX, 0, 0L);
- }
- void SetAnchorIndex(int nIndex)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) != 0);
- ::SendMessage(this->m_hWnd, LB_SETANCHORINDEX, nIndex, 0L);
- }
- int GetCaretIndex() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LB_GETCARETINDEX, 0, 0);
- }
- int SetCaretIndex(int nIndex, BOOL bScroll = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LB_SETCARETINDEX, nIndex, MAKELONG(bScroll, 0));
- }
- // for listbox items
- DWORD_PTR GetItemData(int nIndex) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD_PTR)::SendMessage(this->m_hWnd, LB_GETITEMDATA, nIndex, 0L);
- }
- int SetItemData(int nIndex, DWORD_PTR dwItemData)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LB_SETITEMDATA, nIndex, (LPARAM)dwItemData);
- }
- void* GetItemDataPtr(int nIndex) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (void*)::SendMessage(this->m_hWnd, LB_GETITEMDATA, nIndex, 0L);
- }
- int SetItemDataPtr(int nIndex, void* pData)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return SetItemData(nIndex, (DWORD_PTR)pData);
- }
- int GetItemRect(int nIndex, LPRECT lpRect) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LB_GETITEMRECT, nIndex, (LPARAM)lpRect);
- }
- int GetText(int nIndex, LPTSTR lpszBuffer) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LB_GETTEXT, nIndex, (LPARAM)lpszBuffer);
- }
- #ifdef _OLEAUTO_H_
- BOOL GetTextBSTR(int nIndex, BSTR& bstrText) const
- {
- USES_CONVERSION;
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(bstrText == NULL);
- int nLen = GetTextLen(nIndex);
- if(nLen == LB_ERR)
- return FALSE;
- ATL::CTempBuffer<TCHAR, _WTL_STACK_ALLOC_THRESHOLD> buff;
- LPTSTR lpstrText = buff.Allocate(nLen + 1);
- if(lpstrText == NULL)
- return FALSE;
- if(GetText(nIndex, lpstrText) == LB_ERR)
- return FALSE;
- bstrText = ::SysAllocString(T2OLE(lpstrText));
- return (bstrText != NULL) ? TRUE : FALSE;
- }
- #endif // _OLEAUTO_H_
- #ifdef __ATLSTR_H__
- int GetText(int nIndex, ATL::CString& strText) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- int cchLen = GetTextLen(nIndex);
- if(cchLen == LB_ERR)
- return LB_ERR;
- int nRet = LB_ERR;
- LPTSTR lpstr = strText.GetBufferSetLength(cchLen);
- if(lpstr != NULL)
- {
- nRet = GetText(nIndex, lpstr);
- strText.ReleaseBuffer();
- }
- return nRet;
- }
- #endif // __ATLSTR_H__
- int GetTextLen(int nIndex) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LB_GETTEXTLEN, nIndex, 0L);
- }
- int GetItemHeight(int nIndex) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LB_GETITEMHEIGHT, nIndex, 0L);
- }
- int SetItemHeight(int nIndex, UINT cyItemHeight)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LB_SETITEMHEIGHT, nIndex, MAKELONG(cyItemHeight, 0));
- }
- // Settable only attributes
- void SetColumnWidth(int cxWidth)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, LB_SETCOLUMNWIDTH, cxWidth, 0L);
- }
- BOOL SetTabStops(int nTabStops, LPINT rgTabStops)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & LBS_USETABSTOPS) != 0);
- return (BOOL)::SendMessage(this->m_hWnd, LB_SETTABSTOPS, nTabStops, (LPARAM)rgTabStops);
- }
- BOOL SetTabStops()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & LBS_USETABSTOPS) != 0);
- return (BOOL)::SendMessage(this->m_hWnd, LB_SETTABSTOPS, 0, 0L);
- }
- BOOL SetTabStops(const int& cxEachStop) // takes an 'int'
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & LBS_USETABSTOPS) != 0);
- return (BOOL)::SendMessage(this->m_hWnd, LB_SETTABSTOPS, 1, (LPARAM)(LPINT)&cxEachStop);
- }
- // Operations
- int InitStorage(int nItems, UINT nBytes)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LB_INITSTORAGE, (WPARAM)nItems, nBytes);
- }
- void ResetContent()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, LB_RESETCONTENT, 0, 0L);
- }
- UINT ItemFromPoint(POINT pt, BOOL& bOutside) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- DWORD dw = (DWORD)::SendMessage(this->m_hWnd, LB_ITEMFROMPOINT, 0, MAKELPARAM(pt.x, pt.y));
- bOutside = (BOOL)HIWORD(dw);
- return (UINT)LOWORD(dw);
- }
- // manipulating listbox items
- int AddString(LPCTSTR lpszItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LB_ADDSTRING, 0, (LPARAM)lpszItem);
- }
- int DeleteString(UINT nIndex)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LB_DELETESTRING, nIndex, 0L);
- }
- int InsertString(int nIndex, LPCTSTR lpszItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LB_INSERTSTRING, nIndex, (LPARAM)lpszItem);
- }
- int Dir(UINT attr, LPCTSTR lpszWildCard)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LB_DIR, attr, (LPARAM)lpszWildCard);
- }
- int AddFile(LPCTSTR lpstrFileName)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LB_ADDFILE, 0, (LPARAM)lpstrFileName);
- }
- // selection helpers
- int FindString(int nStartAfter, LPCTSTR lpszItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LB_FINDSTRING, nStartAfter, (LPARAM)lpszItem);
- }
- int FindStringExact(int nIndexStart, LPCTSTR lpszFind) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LB_FINDSTRINGEXACT, nIndexStart, (LPARAM)lpszFind);
- }
- int SelectString(int nStartAfter, LPCTSTR lpszItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LB_SELECTSTRING, nStartAfter, (LPARAM)lpszItem);
- }
- int SelItemRange(BOOL bSelect, int nFirstItem, int nLastItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) != 0);
- ATLASSERT(nFirstItem <= nLastItem);
- return bSelect ? (int)::SendMessage(this->m_hWnd, LB_SELITEMRANGEEX, nFirstItem, nLastItem) : (int)::SendMessage(this->m_hWnd, LB_SELITEMRANGEEX, nLastItem, nFirstItem);
- }
- };
- typedef CListBoxT<ATL::CWindow> CListBox;
- ///////////////////////////////////////////////////////////////////////////////
- // CComboBox - client side for a Windows COMBOBOX control
- template <class TBase>
- class CComboBoxT : public TBase
- {
- public:
- // Constructors
- CComboBoxT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CComboBoxT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Attributes
- static LPCTSTR GetWndClassName()
- {
- return _T("COMBOBOX");
- }
- // for entire combo box
- int GetCount() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, CB_GETCOUNT, 0, 0L);
- }
- int GetCurSel() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, CB_GETCURSEL, 0, 0L);
- }
- int SetCurSel(int nSelect)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, CB_SETCURSEL, nSelect, 0L);
- }
- LCID GetLocale() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (LCID)::SendMessage(this->m_hWnd, CB_GETLOCALE, 0, 0L);
- }
- LCID SetLocale(LCID nNewLocale)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (LCID)::SendMessage(this->m_hWnd, CB_SETLOCALE, (WPARAM)nNewLocale, 0L);
- }
- int GetTopIndex() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, CB_GETTOPINDEX, 0, 0L);
- }
- int SetTopIndex(int nIndex)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, CB_SETTOPINDEX, nIndex, 0L);
- }
- UINT GetHorizontalExtent() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UINT)::SendMessage(this->m_hWnd, CB_GETHORIZONTALEXTENT, 0, 0L);
- }
- void SetHorizontalExtent(UINT nExtent)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, CB_SETHORIZONTALEXTENT, nExtent, 0L);
- }
- int GetDroppedWidth() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, CB_GETDROPPEDWIDTH, 0, 0L);
- }
- int SetDroppedWidth(UINT nWidth)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, CB_SETDROPPEDWIDTH, nWidth, 0L);
- }
- BOOL GetComboBoxInfo(PCOMBOBOXINFO pComboBoxInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, CB_GETCOMBOBOXINFO, 0, (LPARAM)pComboBoxInfo);
- }
- // for edit control
- DWORD GetEditSel() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, CB_GETEDITSEL, 0, 0L);
- }
- BOOL SetEditSel(int nStartChar, int nEndChar)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, CB_SETEDITSEL, 0, MAKELONG(nStartChar, nEndChar));
- }
- // for combobox item
- DWORD_PTR GetItemData(int nIndex) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD_PTR)::SendMessage(this->m_hWnd, CB_GETITEMDATA, nIndex, 0L);
- }
- int SetItemData(int nIndex, DWORD_PTR dwItemData)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, CB_SETITEMDATA, nIndex, (LPARAM)dwItemData);
- }
- void* GetItemDataPtr(int nIndex) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (void*)GetItemData(nIndex);
- }
- int SetItemDataPtr(int nIndex, void* pData)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return SetItemData(nIndex, (DWORD_PTR)pData);
- }
- int GetLBText(int nIndex, LPTSTR lpszText) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, CB_GETLBTEXT, nIndex, (LPARAM)lpszText);
- }
- BOOL GetLBTextBSTR(int nIndex, BSTR& bstrText) const
- {
- USES_CONVERSION;
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(bstrText == NULL);
- int nLen = GetLBTextLen(nIndex);
- if(nLen == CB_ERR)
- return FALSE;
- ATL::CTempBuffer<TCHAR, _WTL_STACK_ALLOC_THRESHOLD> buff;
- LPTSTR lpstrText = buff.Allocate(nLen + 1);
- if(lpstrText == NULL)
- return FALSE;
- if(GetLBText(nIndex, lpstrText) == CB_ERR)
- return FALSE;
- bstrText = ::SysAllocString(T2OLE(lpstrText));
- return (bstrText != NULL) ? TRUE : FALSE;
- }
- #ifdef __ATLSTR_H__
- int GetLBText(int nIndex, ATL::CString& strText) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- int cchLen = GetLBTextLen(nIndex);
- if(cchLen == CB_ERR)
- return CB_ERR;
- int nRet = CB_ERR;
- LPTSTR lpstr = strText.GetBufferSetLength(cchLen);
- if(lpstr != NULL)
- {
- nRet = GetLBText(nIndex, lpstr);
- strText.ReleaseBuffer();
- }
- return nRet;
- }
- #endif // __ATLSTR_H__
- int GetLBTextLen(int nIndex) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, CB_GETLBTEXTLEN, nIndex, 0L);
- }
- int GetItemHeight(int nIndex) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, CB_GETITEMHEIGHT, nIndex, 0L);
- }
- int SetItemHeight(int nIndex, UINT cyItemHeight)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, CB_SETITEMHEIGHT, nIndex, MAKELONG(cyItemHeight, 0));
- }
- BOOL GetExtendedUI() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, CB_GETEXTENDEDUI, 0, 0L);
- }
- int SetExtendedUI(BOOL bExtended = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, CB_SETEXTENDEDUI, bExtended, 0L);
- }
- void GetDroppedControlRect(LPRECT lprect) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, CB_GETDROPPEDCONTROLRECT, 0, (LPARAM)lprect);
- }
- BOOL GetDroppedState() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, CB_GETDROPPEDSTATE, 0, 0L);
- }
- int GetMinVisible() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, CB_GETMINVISIBLE, 0, 0L);
- }
- BOOL SetMinVisible(int nMinVisible)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, CB_SETMINVISIBLE, nMinVisible, 0L);
- }
- // Vista only
- BOOL GetCueBannerText(LPWSTR lpwText, int cchText) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, CB_GETCUEBANNER, (WPARAM)lpwText, cchText);
- }
- // Vista only
- BOOL SetCueBannerText(LPCWSTR lpcwText)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, CB_SETCUEBANNER, 0, (LPARAM)lpcwText);
- }
- // Operations
- int InitStorage(int nItems, UINT nBytes)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, CB_INITSTORAGE, (WPARAM)nItems, nBytes);
- }
- void ResetContent()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, CB_RESETCONTENT, 0, 0L);
- }
- // for edit control
- BOOL LimitText(int nMaxChars)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, CB_LIMITTEXT, nMaxChars, 0L);
- }
- // for drop-down combo boxes
- void ShowDropDown(BOOL bShowIt = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, CB_SHOWDROPDOWN, bShowIt, 0L);
- }
- // manipulating listbox items
- int AddString(LPCTSTR lpszString)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, CB_ADDSTRING, 0, (LPARAM)lpszString);
- }
- int DeleteString(UINT nIndex)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, CB_DELETESTRING, nIndex, 0L);
- }
- int InsertString(int nIndex, LPCTSTR lpszString)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, CB_INSERTSTRING, nIndex, (LPARAM)lpszString);
- }
- int Dir(UINT attr, LPCTSTR lpszWildCard)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, CB_DIR, attr, (LPARAM)lpszWildCard);
- }
- // selection helpers
- int FindString(int nStartAfter, LPCTSTR lpszString) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, CB_FINDSTRING, nStartAfter, (LPARAM)lpszString);
- }
- int FindStringExact(int nIndexStart, LPCTSTR lpszFind) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, CB_FINDSTRINGEXACT, nIndexStart, (LPARAM)lpszFind);
- }
- int SelectString(int nStartAfter, LPCTSTR lpszString)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, CB_SELECTSTRING, nStartAfter, (LPARAM)lpszString);
- }
- // Clipboard operations
- void Clear()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, WM_CLEAR, 0, 0L);
- }
- void Copy()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, WM_COPY, 0, 0L);
- }
- void Cut()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, WM_CUT, 0, 0L);
- }
- void Paste()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, WM_PASTE, 0, 0L);
- }
- };
- typedef CComboBoxT<ATL::CWindow> CComboBox;
- ///////////////////////////////////////////////////////////////////////////////
- // CEdit - client side for a Windows EDIT control
- template <class TBase>
- class CEditT : public TBase
- {
- public:
- // Constructors
- CEditT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CEditT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Attributes
- static LPCTSTR GetWndClassName()
- {
- return _T("EDIT");
- }
- BOOL CanUndo() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_CANUNDO, 0, 0L);
- }
- int GetLineCount() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, EM_GETLINECOUNT, 0, 0L);
- }
- BOOL GetModify() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_GETMODIFY, 0, 0L);
- }
- void SetModify(BOOL bModified = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_SETMODIFY, bModified, 0L);
- }
- void GetRect(LPRECT lpRect) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_GETRECT, 0, (LPARAM)lpRect);
- }
- DWORD GetSel() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, EM_GETSEL, 0, 0L);
- }
- void GetSel(int& nStartChar, int& nEndChar) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_GETSEL, (WPARAM)&nStartChar, (LPARAM)&nEndChar);
- }
- HLOCAL GetHandle() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HLOCAL)::SendMessage(this->m_hWnd, EM_GETHANDLE, 0, 0L);
- }
- void SetHandle(HLOCAL hBuffer)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_SETHANDLE, (WPARAM)hBuffer, 0L);
- }
- DWORD GetMargins() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, EM_GETMARGINS, 0, 0L);
- }
- void GetMargins(UINT& nLeft, UINT& nRight) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- DWORD dwRet = (DWORD)::SendMessage(this->m_hWnd, EM_GETMARGINS, 0, 0L);
- nLeft = LOWORD(dwRet);
- nRight = HIWORD(dwRet);
- }
- void SetMargins(UINT nLeft, UINT nRight, WORD wFlags = EC_LEFTMARGIN | EC_RIGHTMARGIN)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_SETMARGINS, wFlags, MAKELONG(nLeft, nRight));
- }
- UINT GetLimitText() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UINT)::SendMessage(this->m_hWnd, EM_GETLIMITTEXT, 0, 0L);
- }
- void SetLimitText(UINT nMax)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_SETLIMITTEXT, nMax, 0L);
- }
- POINT PosFromChar(UINT nChar) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- DWORD dwRet = (DWORD)::SendMessage(this->m_hWnd, EM_POSFROMCHAR, nChar, 0);
- POINT point = { GET_X_LPARAM(dwRet), GET_Y_LPARAM(dwRet) };
- return point;
- }
- int CharFromPos(POINT pt, int* pLine = NULL) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- DWORD dwRet = (DWORD)::SendMessage(this->m_hWnd, EM_CHARFROMPOS, 0, MAKELPARAM(pt.x, pt.y));
- if(pLine != NULL)
- *pLine = (int)(short)HIWORD(dwRet);
- return (int)(short)LOWORD(dwRet);
- }
- // NOTE: first word in lpszBuffer must contain the size of the buffer!
- int GetLine(int nIndex, LPTSTR lpszBuffer) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, EM_GETLINE, nIndex, (LPARAM)lpszBuffer);
- }
- int GetLine(int nIndex, LPTSTR lpszBuffer, int nMaxLength) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- *(LPWORD)lpszBuffer = (WORD)nMaxLength;
- return (int)::SendMessage(this->m_hWnd, EM_GETLINE, nIndex, (LPARAM)lpszBuffer);
- }
- TCHAR GetPasswordChar() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (TCHAR)::SendMessage(this->m_hWnd, EM_GETPASSWORDCHAR, 0, 0L);
- }
- void SetPasswordChar(TCHAR ch)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_SETPASSWORDCHAR, ch, 0L);
- }
- EDITWORDBREAKPROC GetWordBreakProc() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (EDITWORDBREAKPROC)::SendMessage(this->m_hWnd, EM_GETWORDBREAKPROC, 0, 0L);
- }
- void SetWordBreakProc(EDITWORDBREAKPROC ewbprc)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_SETWORDBREAKPROC, 0, (LPARAM)ewbprc);
- }
- int GetFirstVisibleLine() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, EM_GETFIRSTVISIBLELINE, 0, 0L);
- }
- int GetThumb() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & ES_MULTILINE) != 0);
- return (int)::SendMessage(this->m_hWnd, EM_GETTHUMB, 0, 0L);
- }
- BOOL SetReadOnly(BOOL bReadOnly = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETREADONLY, bReadOnly, 0L);
- }
- UINT GetImeStatus(UINT uStatus) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UINT)::SendMessage(this->m_hWnd, EM_GETIMESTATUS, uStatus, 0L);
- }
- UINT SetImeStatus(UINT uStatus, UINT uData)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UINT)::SendMessage(this->m_hWnd, EM_SETIMESTATUS, uStatus, uData);
- }
- BOOL GetCueBannerText(LPCWSTR lpstrText, int cchText) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_GETCUEBANNER, (WPARAM)lpstrText, cchText);
- }
- // bKeepWithFocus - Vista only
- BOOL SetCueBannerText(LPCWSTR lpstrText, BOOL bKeepWithFocus = FALSE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETCUEBANNER, (WPARAM)bKeepWithFocus, (LPARAM)(lpstrText));
- }
- // Operations
- void EmptyUndoBuffer()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_EMPTYUNDOBUFFER, 0, 0L);
- }
- BOOL FmtLines(BOOL bAddEOL)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_FMTLINES, bAddEOL, 0L);
- }
- void LimitText(int nChars = 0)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_LIMITTEXT, nChars, 0L);
- }
- int LineFromChar(int nIndex = -1) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, EM_LINEFROMCHAR, nIndex, 0L);
- }
- int LineIndex(int nLine = -1) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, EM_LINEINDEX, nLine, 0L);
- }
- int LineLength(int nLine = -1) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, EM_LINELENGTH, nLine, 0L);
- }
- void LineScroll(int nLines, int nChars = 0)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_LINESCROLL, nChars, nLines);
- }
- void ReplaceSel(LPCTSTR lpszNewText, BOOL bCanUndo = FALSE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_REPLACESEL, (WPARAM) bCanUndo, (LPARAM)lpszNewText);
- }
- void SetRect(LPCRECT lpRect)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_SETRECT, 0, (LPARAM)lpRect);
- }
- void SetRectNP(LPCRECT lpRect)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_SETRECTNP, 0, (LPARAM)lpRect);
- }
- void SetSel(DWORD dwSelection, BOOL bNoScroll = FALSE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_SETSEL, LOWORD(dwSelection), HIWORD(dwSelection));
- if(!bNoScroll)
- ::SendMessage(this->m_hWnd, EM_SCROLLCARET, 0, 0L);
- }
- void SetSel(int nStartChar, int nEndChar, BOOL bNoScroll = FALSE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_SETSEL, nStartChar, nEndChar);
- if(!bNoScroll)
- ::SendMessage(this->m_hWnd, EM_SCROLLCARET, 0, 0L);
- }
- void SetSelAll(BOOL bNoScroll = FALSE)
- {
- SetSel(0, -1, bNoScroll);
- }
- void SetSelNone(BOOL bNoScroll = FALSE)
- {
- SetSel(-1, 0, bNoScroll);
- }
- BOOL SetTabStops(int nTabStops, LPINT rgTabStops)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETTABSTOPS, nTabStops, (LPARAM)rgTabStops);
- }
- BOOL SetTabStops()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETTABSTOPS, 0, 0L);
- }
- BOOL SetTabStops(const int& cxEachStop) // takes an 'int'
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETTABSTOPS, 1, (LPARAM)(LPINT)&cxEachStop);
- }
- void ScrollCaret()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_SCROLLCARET, 0, 0L);
- }
- int Scroll(int nScrollAction)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & ES_MULTILINE) != 0);
- LRESULT lRet = ::SendMessage(this->m_hWnd, EM_SCROLL, nScrollAction, 0L);
- if(!(BOOL)HIWORD(lRet))
- return -1; // failed
- return (int)(short)LOWORD(lRet);
-
- }
- void InsertText(int nInsertAfterChar, LPCTSTR lpstrText, BOOL bNoScroll = FALSE, BOOL bCanUndo = FALSE)
- {
- SetSel(nInsertAfterChar, nInsertAfterChar, bNoScroll);
- ReplaceSel(lpstrText, bCanUndo);
- }
- void AppendText(LPCTSTR lpstrText, BOOL bNoScroll = FALSE, BOOL bCanUndo = FALSE)
- {
- InsertText(this->GetWindowTextLength(), lpstrText, bNoScroll, bCanUndo);
- }
- BOOL ShowBalloonTip(PEDITBALLOONTIP pEditBaloonTip)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_SHOWBALLOONTIP, 0, (LPARAM)pEditBaloonTip);
- }
- BOOL HideBalloonTip()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_HIDEBALLOONTIP, 0, 0L);
- }
- #if (_WIN32_WINNT >= 0x0600)
- DWORD GetHilite() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, EM_GETHILITE, 0, 0L);
- }
- void GetHilite(int& nStartChar, int& nEndChar) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- DWORD dwRet = (DWORD)::SendMessage(this->m_hWnd, EM_GETHILITE, 0, 0L);
- nStartChar = (int)(short)LOWORD(dwRet);
- nEndChar = (int)(short)HIWORD(dwRet);
- }
- void SetHilite(int nStartChar, int nEndChar)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_SETHILITE, nStartChar, nEndChar);
- }
- #endif // (_WIN32_WINNT >= 0x0600)
- // Clipboard operations
- BOOL Undo()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_UNDO, 0, 0L);
- }
- void Clear()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, WM_CLEAR, 0, 0L);
- }
- void Copy()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, WM_COPY, 0, 0L);
- }
- void Cut()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, WM_CUT, 0, 0L);
- }
- void Paste()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, WM_PASTE, 0, 0L);
- }
- // New messages added in Windows 10.0.17763
- #if defined(NTDDI_VERSION) && defined(NTDDI_WIN10_RS5) && (NTDDI_VERSION >= NTDDI_WIN10_RS5)
- DWORD SetExtendedStyle(DWORD dwStyle, DWORD dwMask)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return ::SendMessage(this->m_hWnd, EM_SETEXTENDEDSTYLE, dwMask, dwStyle);
- }
- DWORD GetExtendedStyle() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return ::SendMessage(this->m_hWnd, EM_GETEXTENDEDSTYLE, 0, 0L);
- }
- BOOL SetEndOfLine(EC_ENDOFLINE eolType)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETENDOFLINE, eolType, 0L);
- }
- EC_ENDOFLINE GetEndOfLine() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (EC_ENDOFLINE)::SendMessage(this->m_hWnd, EM_GETENDOFLINE, 0, 0L);
- }
- BOOL EnableSearchWeb(BOOL bEnable)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_ENABLESEARCHWEB, (WPARAM)bEnable, 0L);
- }
- void SearchWeb()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_SEARCHWEB, 0, 0L);
- }
- BOOL SetCaretIndex(DWORD dwCaretIndex)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETCARETINDEX, dwCaretIndex, 0L);
- }
- DWORD GetCaretIndex() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return ::SendMessage(this->m_hWnd, EM_GETCARETINDEX, 0, 0L);
- }
- BOOL GetZoom(int& nNum, int& nDen) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_GETZOOM, (WPARAM)&nNum, (LPARAM)&nDen);
- }
- BOOL SetZoom(int nNum, int nDen)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((nNum >= 0) && (nNum <= 64));
- ATLASSERT((nDen >= 0) && (nDen <= 64));
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETZOOM, nNum, nDen);
- }
- DWORD GetFileLineFromChar(DWORD dwCharIndex) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return ::SendMessage(this->m_hWnd, EM_FILELINEFROMCHAR, dwCharIndex, 0L);
- }
- DWORD GetFileLineIndex(DWORD dwLineNum) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return ::SendMessage(this->m_hWnd, EM_FILELINEINDEX, dwLineNum, 0L);
- }
- DWORD GetFileLineLength(DWORD dwCharIndex) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return ::SendMessage(this->m_hWnd, EM_FILELINELENGTH, dwCharIndex, 0L);
- }
- DWORD GetFileLine(DWORD dwLineNum, LPTSTR lpstrLine, WORD wLen) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- WORD* pw = (WORD*)lpstrLine;
- *pw = wLen;
- return ::SendMessage(this->m_hWnd, EM_GETFILELINE, dwLineNum, (LPARAM)lpstrLine);
- }
- #ifdef __ATLSTR_H__
- ATL::CString GetFileLine(DWORD dwLineNum) const
- {
- ATL::CString strLine;
- DWORD dwCharIndex = GetFileLineIndex(dwLineNum);
- if(dwCharIndex != (DWORD)-1)
- {
- DWORD dwLen = GetFileLineLength(dwCharIndex);
- if(dwLen > 0)
- {
- LPTSTR lpstrLine = strLine.GetBufferSetLength(dwLen);
- ATLVERIFY(GetFileLine(dwLineNum, lpstrLine, (WORD)dwLen) == dwLen);
- strLine.ReleaseBuffer();
- }
- }
- return strLine;
- }
- #endif // __ATLSTR_H__
- DWORD GetFileLineCount() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return ::SendMessage(this->m_hWnd, EM_GETFILELINECOUNT, 0, 0L);
- }
- #endif // defined(NTDDI_VERSION) && defined(NTDDI_WIN10_RS5) && (NTDDI_VERSION >= NTDDI_WIN10_RS5)
- };
- typedef CEditT<ATL::CWindow> CEdit;
- ///////////////////////////////////////////////////////////////////////////////
- // CEditCommands - message handlers for standard EDIT commands
- // Chain to CEditCommands message map. Your class must also derive from CEdit.
- // Example:
- // class CMyEdit : public CWindowImpl<CMyEdit, CEdit>,
- // public CEditCommands<CMyEdit>
- // {
- // public:
- // BEGIN_MSG_MAP(CMyEdit)
- // // your handlers...
- // CHAIN_MSG_MAP_ALT(CEditCommands<CMyEdit>, 1)
- // END_MSG_MAP()
- // // other stuff...
- // };
- template <class T>
- class CEditCommands
- {
- public:
- BEGIN_MSG_MAP(CEditCommands< T >)
- ALT_MSG_MAP(1)
- COMMAND_ID_HANDLER(ID_EDIT_CLEAR, OnEditClear)
- COMMAND_ID_HANDLER(ID_EDIT_CLEAR_ALL, OnEditClearAll)
- COMMAND_ID_HANDLER(ID_EDIT_COPY, OnEditCopy)
- COMMAND_ID_HANDLER(ID_EDIT_CUT, OnEditCut)
- COMMAND_ID_HANDLER(ID_EDIT_PASTE, OnEditPaste)
- COMMAND_ID_HANDLER(ID_EDIT_SELECT_ALL, OnEditSelectAll)
- COMMAND_ID_HANDLER(ID_EDIT_UNDO, OnEditUndo)
- END_MSG_MAP()
- LRESULT OnEditClear(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
- {
- T* pT = static_cast<T*>(this);
- pT->Clear();
- return 0;
- }
- LRESULT OnEditClearAll(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
- {
- T* pT = static_cast<T*>(this);
- pT->SetSel(0, -1);
- pT->Clear();
- return 0;
- }
- LRESULT OnEditCopy(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
- {
- T* pT = static_cast<T*>(this);
- pT->Copy();
- return 0;
- }
- LRESULT OnEditCut(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
- {
- T* pT = static_cast<T*>(this);
- pT->Cut();
- return 0;
- }
- LRESULT OnEditPaste(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
- {
- T* pT = static_cast<T*>(this);
- pT->Paste();
- return 0;
- }
- LRESULT OnEditSelectAll(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
- {
- T* pT = static_cast<T*>(this);
- pT->SetSel(0, -1);
- return 0;
- }
- LRESULT OnEditUndo(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
- {
- T* pT = static_cast<T*>(this);
- pT->Undo();
- return 0;
- }
- // State (update UI) helpers
- BOOL CanCut() const
- { return HasSelection(); }
- BOOL CanCopy() const
- { return HasSelection(); }
- BOOL CanClear() const
- { return HasSelection(); }
- BOOL CanSelectAll() const
- { return HasText(); }
- BOOL CanFind() const
- { return HasText(); }
- BOOL CanRepeat() const
- { return HasText(); }
- BOOL CanReplace() const
- { return HasText(); }
- BOOL CanClearAll() const
- { return HasText(); }
- // Implementation
- BOOL HasSelection() const
- {
- const T* pT = static_cast<const T*>(this);
- int nMin = 0, nMax = 0;
- ::SendMessage(pT->m_hWnd, EM_GETSEL, (WPARAM)&nMin, (LPARAM)&nMax);
- return (nMin != nMax);
- }
- BOOL HasText() const
- {
- const T* pT = static_cast<const T*>(this);
- return (pT->GetWindowTextLength() > 0);
- }
- };
- ///////////////////////////////////////////////////////////////////////////////
- // CScrollBar - client side for a Windows SCROLLBAR control
- template <class TBase>
- class CScrollBarT : public TBase
- {
- public:
- // Constructors
- CScrollBarT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CScrollBarT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Attributes
- static LPCTSTR GetWndClassName()
- {
- return _T("SCROLLBAR");
- }
- int GetScrollPos() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return ::GetScrollPos(this->m_hWnd, SB_CTL);
- }
- int SetScrollPos(int nPos, BOOL bRedraw = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return ::SetScrollPos(this->m_hWnd, SB_CTL, nPos, bRedraw);
- }
- void GetScrollRange(LPINT lpMinPos, LPINT lpMaxPos) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::GetScrollRange(this->m_hWnd, SB_CTL, lpMinPos, lpMaxPos);
- }
- void SetScrollRange(int nMinPos, int nMaxPos, BOOL bRedraw = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SetScrollRange(this->m_hWnd, SB_CTL, nMinPos, nMaxPos, bRedraw);
- }
- BOOL GetScrollInfo(LPSCROLLINFO lpScrollInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return ::GetScrollInfo(this->m_hWnd, SB_CTL, lpScrollInfo);
- }
- int SetScrollInfo(LPSCROLLINFO lpScrollInfo, BOOL bRedraw = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return ::SetScrollInfo(this->m_hWnd, SB_CTL, lpScrollInfo, bRedraw);
- }
- int GetScrollLimit() const
- {
- SCROLLINFO info = { sizeof(SCROLLINFO), SIF_RANGE | SIF_PAGE };
- ::GetScrollInfo(this->m_hWnd, SB_CTL, &info);
- if(info.nPage > 1)
- info.nMax -= info.nPage - 1;
- return info.nMax;
- }
- BOOL GetScrollBarInfo(PSCROLLBARINFO pScrollBarInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, SBM_GETSCROLLBARINFO, 0, (LPARAM)pScrollBarInfo);
- }
- // Operations
- void ShowScrollBar(BOOL bShow = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::ShowScrollBar(this->m_hWnd, SB_CTL, bShow);
- }
- BOOL EnableScrollBar(UINT nArrowFlags = ESB_ENABLE_BOTH)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return ::EnableScrollBar(this->m_hWnd, SB_CTL, nArrowFlags);
- }
- };
- typedef CScrollBarT<ATL::CWindow> CScrollBar;
- // --- Windows Common Controls ---
- ///////////////////////////////////////////////////////////////////////////////
- // CImageList
- // forward declarations
- template <bool t_bManaged> class CImageListT;
- typedef CImageListT<false> CImageList;
- typedef CImageListT<true> CImageListManaged;
- template <bool t_bManaged>
- class CImageListT
- {
- public:
- // Data members
- HIMAGELIST m_hImageList;
- // Constructor/destructor/operators
- CImageListT(HIMAGELIST hImageList = NULL) : m_hImageList(hImageList)
- { }
- ~CImageListT()
- {
- if(t_bManaged && (m_hImageList != NULL))
- Destroy();
- }
- CImageListT<t_bManaged>& operator =(HIMAGELIST hImageList)
- {
- Attach(hImageList);
- return *this;
- }
- void Attach(HIMAGELIST hImageList)
- {
- if(t_bManaged && (m_hImageList != NULL) && (m_hImageList != hImageList))
- ImageList_Destroy(m_hImageList);
- m_hImageList = hImageList;
- }
- HIMAGELIST Detach()
- {
- HIMAGELIST hImageList = m_hImageList;
- m_hImageList = NULL;
- return hImageList;
- }
- operator HIMAGELIST() const { return m_hImageList; }
- bool IsNull() const { return (m_hImageList == NULL); }
- // Attributes
- int GetImageCount() const
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_GetImageCount(m_hImageList);
- }
- COLORREF GetBkColor() const
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_GetBkColor(m_hImageList);
- }
- COLORREF SetBkColor(COLORREF cr)
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_SetBkColor(m_hImageList, cr);
- }
- BOOL GetImageInfo(int nImage, IMAGEINFO* pImageInfo) const
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_GetImageInfo(m_hImageList, nImage, pImageInfo);
- }
- HICON GetIcon(int nIndex, UINT uFlags = ILD_NORMAL) const
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_GetIcon(m_hImageList, nIndex, uFlags);
- }
- BOOL GetIconSize(int& cx, int& cy) const
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_GetIconSize(m_hImageList, &cx, &cy);
- }
- BOOL GetIconSize(SIZE& size) const
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_GetIconSize(m_hImageList, (int*)&size.cx, (int*)&size.cy);
- }
- BOOL SetIconSize(int cx, int cy)
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_SetIconSize(m_hImageList, cx, cy);
- }
- BOOL SetIconSize(SIZE size)
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_SetIconSize(m_hImageList, size.cx, size.cy);
- }
- BOOL SetImageCount(UINT uNewCount)
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_SetImageCount(m_hImageList, uNewCount);
- }
- BOOL SetOverlayImage(int nImage, int nOverlay)
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_SetOverlayImage(m_hImageList, nImage, nOverlay);
- }
- // Operations
- BOOL Create(int cx, int cy, UINT nFlags, int nInitial, int nGrow)
- {
- ATLASSERT(m_hImageList == NULL);
- m_hImageList = ImageList_Create(cx, cy, nFlags, nInitial, nGrow);
- return (m_hImageList != NULL) ? TRUE : FALSE;
- }
- BOOL Create(ATL::_U_STRINGorID bitmap, int cx, int nGrow, COLORREF crMask)
- {
- ATLASSERT(m_hImageList == NULL);
- m_hImageList = ImageList_LoadBitmap(ModuleHelper::GetResourceInstance(), bitmap.m_lpstr, cx, nGrow, crMask);
- return (m_hImageList != NULL) ? TRUE : FALSE;
- }
- BOOL CreateFromImage(ATL::_U_STRINGorID image, int cx, int nGrow, COLORREF crMask, UINT uType, UINT uFlags = LR_DEFAULTCOLOR | LR_DEFAULTSIZE)
- {
- ATLASSERT(m_hImageList == NULL);
- m_hImageList = ImageList_LoadImage(ModuleHelper::GetResourceInstance(), image.m_lpstr, cx, nGrow, crMask, uType, uFlags);
- return (m_hImageList != NULL) ? TRUE : FALSE;
- }
- BOOL Merge(HIMAGELIST hImageList1, int nImage1, HIMAGELIST hImageList2, int nImage2, int dx, int dy)
- {
- ATLASSERT(m_hImageList == NULL);
- m_hImageList = ImageList_Merge(hImageList1, nImage1, hImageList2, nImage2, dx, dy);
- return (m_hImageList != NULL) ? TRUE : FALSE;
- }
- #ifdef __IStream_INTERFACE_DEFINED__
- BOOL CreateFromStream(LPSTREAM lpStream)
- {
- ATLASSERT(m_hImageList == NULL);
- m_hImageList = ImageList_Read(lpStream);
- return (m_hImageList != NULL) ? TRUE : FALSE;
- }
- #endif // __IStream_INTERFACE_DEFINED__
- BOOL Destroy()
- {
- if (m_hImageList == NULL)
- return FALSE;
- BOOL bRet = ImageList_Destroy(m_hImageList);
- if(bRet)
- m_hImageList = NULL;
- return bRet;
- }
- int Add(HBITMAP hBitmap, HBITMAP hBitmapMask = NULL)
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_Add(m_hImageList, hBitmap, hBitmapMask);
- }
- int Add(HBITMAP hBitmap, COLORREF crMask)
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_AddMasked(m_hImageList, hBitmap, crMask);
- }
- BOOL Remove(int nImage)
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_Remove(m_hImageList, nImage);
- }
- BOOL RemoveAll()
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_RemoveAll(m_hImageList);
- }
- BOOL Replace(int nImage, HBITMAP hBitmap, HBITMAP hBitmapMask)
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_Replace(m_hImageList, nImage, hBitmap, hBitmapMask);
- }
- int AddIcon(HICON hIcon)
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_AddIcon(m_hImageList, hIcon);
- }
- int ReplaceIcon(int nImage, HICON hIcon)
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_ReplaceIcon(m_hImageList, nImage, hIcon);
- }
- HICON ExtractIcon(int nImage)
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_ExtractIcon(NULL, m_hImageList, nImage);
- }
- BOOL Draw(HDC hDC, int nImage, int x, int y, UINT nStyle)
- {
- ATLASSERT(m_hImageList != NULL);
- ATLASSERT(hDC != NULL);
- return ImageList_Draw(m_hImageList, nImage, hDC, x, y, nStyle);
- }
- BOOL Draw(HDC hDC, int nImage, POINT pt, UINT nStyle)
- {
- ATLASSERT(m_hImageList != NULL);
- ATLASSERT(hDC != NULL);
- return ImageList_Draw(m_hImageList, nImage, hDC, pt.x, pt.y, nStyle);
- }
- BOOL DrawEx(int nImage, HDC hDC, int x, int y, int dx, int dy, COLORREF rgbBk, COLORREF rgbFg, UINT fStyle)
- {
- ATLASSERT(m_hImageList != NULL);
- ATLASSERT(hDC != NULL);
- return ImageList_DrawEx(m_hImageList, nImage, hDC, x, y, dx, dy, rgbBk, rgbFg, fStyle);
- }
- BOOL DrawEx(int nImage, HDC hDC, RECT& rect, COLORREF rgbBk, COLORREF rgbFg, UINT fStyle)
- {
- ATLASSERT(m_hImageList != NULL);
- ATLASSERT(hDC != NULL);
- return ImageList_DrawEx(m_hImageList, nImage, hDC, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, rgbBk, rgbFg, fStyle);
- }
- static BOOL DrawIndirect(IMAGELISTDRAWPARAMS* pimldp)
- {
- return ImageList_DrawIndirect(pimldp);
- }
- BOOL Copy(int nSrc, int nDst, UINT uFlags = ILCF_MOVE)
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_Copy(m_hImageList, nDst, m_hImageList, nSrc, uFlags);
- }
- #ifdef __IStream_INTERFACE_DEFINED__
- static HIMAGELIST Read(LPSTREAM lpStream)
- {
- return ImageList_Read(lpStream);
- }
- BOOL Write(LPSTREAM lpStream)
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_Write(m_hImageList, lpStream);
- }
- static HRESULT ReadEx(DWORD dwFlags, LPSTREAM lpStream, REFIID riid, PVOID* ppv)
- {
- return ImageList_ReadEx(dwFlags, lpStream, riid, ppv);
- }
- HRESULT WriteEx(DWORD dwFlags, LPSTREAM lpStream)
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_WriteEx(m_hImageList, dwFlags, lpStream);
- }
- #endif // __IStream_INTERFACE_DEFINED__
- // Drag operations
- BOOL BeginDrag(int nImage, POINT ptHotSpot)
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_BeginDrag(m_hImageList, nImage, ptHotSpot.x, ptHotSpot.y);
- }
- BOOL BeginDrag(int nImage, int xHotSpot, int yHotSpot)
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_BeginDrag(m_hImageList, nImage, xHotSpot, yHotSpot);
- }
- static void EndDrag()
- {
- ImageList_EndDrag();
- }
- static BOOL DragMove(POINT pt)
- {
- return ImageList_DragMove(pt.x, pt.y);
- }
- static BOOL DragMove(int x, int y)
- {
- return ImageList_DragMove(x, y);
- }
- BOOL SetDragCursorImage(int nDrag, POINT ptHotSpot)
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_SetDragCursorImage(m_hImageList, nDrag, ptHotSpot.x, ptHotSpot.y);
- }
- BOOL SetDragCursorImage(int nDrag, int xHotSpot, int yHotSpot)
- {
- ATLASSERT(m_hImageList != NULL);
- return ImageList_SetDragCursorImage(m_hImageList, nDrag, xHotSpot, yHotSpot);
- }
- static BOOL DragShowNolock(BOOL bShow = TRUE)
- {
- return ImageList_DragShowNolock(bShow);
- }
- static CImageList GetDragImage(LPPOINT lpPoint, LPPOINT lpPointHotSpot)
- {
- return CImageList(ImageList_GetDragImage(lpPoint, lpPointHotSpot));
- }
- static BOOL DragEnter(HWND hWnd, POINT point)
- {
- return ImageList_DragEnter(hWnd, point.x, point.y);
- }
- static BOOL DragEnter(HWND hWnd, int x, int y)
- {
- return ImageList_DragEnter(hWnd, x, y);
- }
- static BOOL DragLeave(HWND hWnd)
- {
- return ImageList_DragLeave(hWnd);
- }
- CImageList Duplicate() const
- {
- ATLASSERT(m_hImageList != NULL);
- return CImageList(ImageList_Duplicate(m_hImageList));
- }
- static CImageList Duplicate(HIMAGELIST hImageList)
- {
- ATLASSERT(hImageList != NULL);
- return CImageList(ImageList_Duplicate(hImageList));
- }
- };
- ///////////////////////////////////////////////////////////////////////////////
- // CToolTipCtrl
- class CToolInfo : public TOOLINFO
- {
- public:
- CToolInfo(UINT nFlags, HWND hWnd, UINT_PTR nIDTool = 0, LPRECT lpRect = NULL, LPTSTR lpstrText = LPSTR_TEXTCALLBACK, LPARAM lUserParam = NULL)
- {
- Init(nFlags, hWnd, nIDTool, lpRect, lpstrText, lUserParam);
- }
- operator LPTOOLINFO() { return this; }
- operator LPARAM() { return (LPARAM)this; }
- void Init(UINT nFlags, HWND hWnd, UINT_PTR nIDTool = 0, LPRECT lpRect = NULL, LPTSTR lpstrText = LPSTR_TEXTCALLBACK, LPARAM lUserParam = NULL)
- {
- ATLASSERT(::IsWindow(hWnd));
- memset(this, 0, sizeof(TOOLINFO));
- cbSize = RunTimeHelper::SizeOf_TOOLINFO();
- uFlags = nFlags;
- if(nIDTool == 0)
- {
- hwnd = ::GetParent(hWnd);
- uFlags |= TTF_IDISHWND;
- uId = (UINT_PTR)hWnd;
- }
- else
- {
- hwnd = hWnd;
- uId = nIDTool;
- }
- if(lpRect != NULL)
- rect = *lpRect;
- hinst = ModuleHelper::GetResourceInstance();
- lpszText = lpstrText;
- lParam = lUserParam;
- }
- };
- template <class TBase>
- class CToolTipCtrlT : public TBase
- {
- public:
- // Constructors
- CToolTipCtrlT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CToolTipCtrlT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Attributes
- static LPCTSTR GetWndClassName()
- {
- return TOOLTIPS_CLASS;
- }
- void GetText(LPTOOLINFO lpToolInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TTM_GETTEXT, 0, (LPARAM)&lpToolInfo);
- }
- void GetText(LPTSTR lpstrText, HWND hWnd, UINT_PTR nIDTool = 0) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(hWnd != NULL);
- CToolInfo ti(0, hWnd, nIDTool, NULL, lpstrText);
- ::SendMessage(this->m_hWnd, TTM_GETTEXT, 0, ti);
- }
- BOOL GetToolInfo(LPTOOLINFO lpToolInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TTM_GETTOOLINFO, 0, (LPARAM)lpToolInfo);
- }
- BOOL GetToolInfo(HWND hWnd, UINT_PTR nIDTool, UINT* puFlags, LPRECT lpRect, LPTSTR lpstrText) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(hWnd != NULL);
- ATLASSERT(puFlags != NULL);
- ATLASSERT(lpRect != NULL);
- CToolInfo ti(0, hWnd, nIDTool, NULL, lpstrText);
- BOOL bRet = (BOOL)::SendMessage(this->m_hWnd, TTM_GETTOOLINFO, 0, ti);
- if(bRet != FALSE)
- {
- *puFlags = ti.uFlags;
- *lpRect = ti.rect;
- }
- return bRet;
- }
- void SetToolInfo(LPTOOLINFO lpToolInfo)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TTM_SETTOOLINFO, 0, (LPARAM)lpToolInfo);
- }
- void SetToolRect(LPTOOLINFO lpToolInfo)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TTM_NEWTOOLRECT, 0, (LPARAM)lpToolInfo);
- }
- void SetToolRect(HWND hWnd, UINT_PTR nIDTool, LPCRECT lpRect)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(hWnd != NULL);
- ATLASSERT(nIDTool != 0);
- CToolInfo ti(0, hWnd, nIDTool, (LPRECT)lpRect, NULL);
- ::SendMessage(this->m_hWnd, TTM_NEWTOOLRECT, 0, ti);
- }
- int GetToolCount() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TTM_GETTOOLCOUNT, 0, 0L);
- }
- int GetDelayTime(DWORD dwType) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TTM_GETDELAYTIME, dwType, 0L);
- }
- void SetDelayTime(DWORD dwType, int nTime)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TTM_SETDELAYTIME, dwType, MAKELPARAM(nTime, 0));
- }
- void GetMargin(LPRECT lpRect) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TTM_GETMARGIN, 0, (LPARAM)lpRect);
- }
- void SetMargin(LPRECT lpRect)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TTM_SETMARGIN, 0, (LPARAM)lpRect);
- }
- int GetMaxTipWidth() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TTM_GETMAXTIPWIDTH, 0, 0L);
- }
- int SetMaxTipWidth(int nWidth)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TTM_SETMAXTIPWIDTH, 0, nWidth);
- }
- COLORREF GetTipBkColor() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, TTM_GETTIPBKCOLOR, 0, 0L);
- }
- void SetTipBkColor(COLORREF clr)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TTM_SETTIPBKCOLOR, (WPARAM)clr, 0L);
- }
- COLORREF GetTipTextColor() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, TTM_GETTIPTEXTCOLOR, 0, 0L);
- }
- void SetTipTextColor(COLORREF clr)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TTM_SETTIPTEXTCOLOR, (WPARAM)clr, 0L);
- }
- BOOL GetCurrentTool(LPTOOLINFO lpToolInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TTM_GETCURRENTTOOL, 0, (LPARAM)lpToolInfo);
- }
- SIZE GetBubbleSize(LPTOOLINFO lpToolInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- DWORD dwRet = (DWORD)::SendMessage(this->m_hWnd, TTM_GETBUBBLESIZE, 0, (LPARAM)lpToolInfo);
- SIZE size = { GET_X_LPARAM(dwRet), GET_Y_LPARAM(dwRet) };
- return size;
- }
- BOOL SetTitle(UINT_PTR uIcon, LPCTSTR lpstrTitle)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TTM_SETTITLE, uIcon, (LPARAM)lpstrTitle);
- }
- BOOL SetTitle(HICON hIcon, LPCTSTR lpstrTitle)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TTM_SETTITLE, (WPARAM)hIcon, (LPARAM)lpstrTitle);
- }
- void GetTitle(PTTGETTITLE pTTGetTitle) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TTM_GETTITLE, 0, (LPARAM)pTTGetTitle);
- }
- void SetWindowTheme(LPCWSTR lpstrTheme)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TTM_SETWINDOWTHEME, 0, (LPARAM)lpstrTheme);
- }
- // Operations
- void Activate(BOOL bActivate)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TTM_ACTIVATE, bActivate, 0L);
- }
- BOOL AddTool(LPTOOLINFO lpToolInfo)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TTM_ADDTOOL, 0, (LPARAM)lpToolInfo);
- }
- BOOL AddTool(HWND hWnd, ATL::_U_STRINGorID text = LPSTR_TEXTCALLBACK, LPCRECT lpRectTool = NULL, UINT_PTR nIDTool = 0)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(hWnd != NULL);
- // the toolrect and toolid must both be zero or both valid
- ATLASSERT(((lpRectTool != NULL) && (nIDTool != 0)) || ((lpRectTool == NULL) && (nIDTool == 0)));
- CToolInfo ti(0, hWnd, nIDTool, (LPRECT)lpRectTool, (LPTSTR)text.m_lpstr);
- return (BOOL)::SendMessage(this->m_hWnd, TTM_ADDTOOL, 0, ti);
- }
- void DelTool(LPTOOLINFO lpToolInfo)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TTM_DELTOOL, 0, (LPARAM)lpToolInfo);
- }
- void DelTool(HWND hWnd, UINT_PTR nIDTool = 0)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(hWnd != NULL);
- CToolInfo ti(0, hWnd, nIDTool, NULL, NULL);
- ::SendMessage(this->m_hWnd, TTM_DELTOOL, 0, ti);
- }
- BOOL HitTest(LPTTHITTESTINFO lpHitTestInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TTM_HITTEST, 0, (LPARAM)lpHitTestInfo);
- }
- BOOL HitTest(HWND hWnd, POINT pt, LPTOOLINFO lpToolInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(hWnd != NULL);
- ATLASSERT(lpToolInfo != NULL);
- TTHITTESTINFO hti = {};
- hti.ti.cbSize = RunTimeHelper::SizeOf_TOOLINFO();
- hti.hwnd = hWnd;
- hti.pt.x = pt.x;
- hti.pt.y = pt.y;
- if((BOOL)::SendMessage(this->m_hWnd, TTM_HITTEST, 0, (LPARAM)&hti) != FALSE)
- {
- *lpToolInfo = hti.ti;
- return TRUE;
- }
- return FALSE;
- }
- void RelayEvent(LPMSG lpMsg)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TTM_RELAYEVENT, 0, (LPARAM)lpMsg);
- }
- void UpdateTipText(LPTOOLINFO lpToolInfo)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TTM_UPDATETIPTEXT, 0, (LPARAM)lpToolInfo);
- }
- void UpdateTipText(ATL::_U_STRINGorID text, HWND hWnd, UINT_PTR nIDTool = 0)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(hWnd != NULL);
- CToolInfo ti(0, hWnd, nIDTool, NULL, (LPTSTR)text.m_lpstr);
- ::SendMessage(this->m_hWnd, TTM_UPDATETIPTEXT, 0, ti);
- }
- BOOL EnumTools(UINT_PTR nTool, LPTOOLINFO lpToolInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TTM_ENUMTOOLS, nTool, (LPARAM)lpToolInfo);
- }
- void Pop()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TTM_POP, 0, 0L);
- }
- void TrackActivate(LPTOOLINFO lpToolInfo, BOOL bActivate)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TTM_TRACKACTIVATE, bActivate, (LPARAM)lpToolInfo);
- }
- void TrackActivate(HWND hWnd, UINT_PTR nIDTool, BOOL bActivate)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(hWnd != NULL);
- CToolInfo ti(0, hWnd, nIDTool);
- ::SendMessage(this->m_hWnd, TTM_TRACKACTIVATE, bActivate, ti);
- }
- void TrackPosition(int xPos, int yPos)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TTM_TRACKPOSITION, 0, MAKELPARAM(xPos, yPos));
- }
- void Update()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TTM_UPDATE, 0, 0L);
- }
- BOOL AdjustRect(LPRECT lpRect, BOOL bLarger /*= TRUE*/)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TTM_ADJUSTRECT, bLarger, (LPARAM)lpRect);
- }
- void Popup()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TTM_POPUP, 0, 0L);
- }
- };
- typedef CToolTipCtrlT<ATL::CWindow> CToolTipCtrl;
- ///////////////////////////////////////////////////////////////////////////////
- // CHeaderCtrl
- template <class TBase>
- class CHeaderCtrlT : public TBase
- {
- public:
- // Constructors
- CHeaderCtrlT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CHeaderCtrlT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Attributes
- static LPCTSTR GetWndClassName()
- {
- return WC_HEADER;
- }
- int GetItemCount() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, HDM_GETITEMCOUNT, 0, 0L);
- }
- BOOL GetItem(int nIndex, LPHDITEM pHeaderItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, HDM_GETITEM, nIndex, (LPARAM)pHeaderItem);
- }
- BOOL SetItem(int nIndex, LPHDITEM pHeaderItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, HDM_SETITEM, nIndex, (LPARAM)pHeaderItem);
- }
- CImageList GetImageList() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CImageList((HIMAGELIST)::SendMessage(this->m_hWnd, HDM_GETIMAGELIST, 0, 0L));
- }
- CImageList SetImageList(HIMAGELIST hImageList)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CImageList((HIMAGELIST)::SendMessage(this->m_hWnd, HDM_SETIMAGELIST, 0, (LPARAM)hImageList));
- }
- BOOL GetOrderArray(int nSize, int* lpnArray) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, HDM_GETORDERARRAY, nSize, (LPARAM)lpnArray);
- }
- BOOL SetOrderArray(int nSize, int* lpnArray)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, HDM_SETORDERARRAY, nSize, (LPARAM)lpnArray);
- }
- BOOL GetItemRect(int nIndex, LPRECT lpItemRect) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, HDM_GETITEMRECT, nIndex, (LPARAM)lpItemRect);
- }
- int SetHotDivider(BOOL bPos, DWORD dwInputValue)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, HDM_SETHOTDIVIDER, bPos, dwInputValue);
- }
- BOOL GetUnicodeFormat() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, HDM_GETUNICODEFORMAT, 0, 0L);
- }
- BOOL SetUnicodeFormat(BOOL bUnicode = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, HDM_SETUNICODEFORMAT, bUnicode, 0L);
- }
- int GetBitmapMargin() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, HDM_GETBITMAPMARGIN, 0, 0L);
- }
- int SetBitmapMargin(int nWidth)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, HDM_SETBITMAPMARGIN, nWidth, 0L);
- }
- int SetFilterChangeTimeout(DWORD dwTimeOut)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, HDM_SETFILTERCHANGETIMEOUT, 0, dwTimeOut);
- }
- #if (_WIN32_WINNT >= 0x0600)
- BOOL GetItemDropDownRect(int nIndex, LPRECT lpRect) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, HDM_GETITEMDROPDOWNRECT, nIndex, (LPARAM)lpRect);
- }
- BOOL GetOverflowRect(LPRECT lpRect) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, HDM_GETOVERFLOWRECT, 0, (LPARAM)lpRect);
- }
- int GetFocusedItem() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, HDM_GETFOCUSEDITEM, 0, 0L);
- }
- BOOL SetFocusedItem(int nIndex)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, HDM_SETFOCUSEDITEM, 0, nIndex);
- }
- #endif // (_WIN32_WINNT >= 0x0600)
- // Operations
- int InsertItem(int nIndex, LPHDITEM phdi)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, HDM_INSERTITEM, nIndex, (LPARAM)phdi);
- }
- int AddItem(LPHDITEM phdi)
- {
- return InsertItem(GetItemCount(), phdi);
- }
- BOOL DeleteItem(int nIndex)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, HDM_DELETEITEM, nIndex, 0L);
- }
- BOOL Layout(HD_LAYOUT* pHeaderLayout)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, HDM_LAYOUT, 0, (LPARAM)pHeaderLayout);
- }
- int HitTest(LPHDHITTESTINFO lpHitTestInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, HDM_HITTEST, 0, (LPARAM)lpHitTestInfo);
- }
- int OrderToIndex(int nOrder)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, HDM_ORDERTOINDEX, nOrder, 0L);
- }
- CImageList CreateDragImage(int nIndex)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CImageList((HIMAGELIST)::SendMessage(this->m_hWnd, HDM_CREATEDRAGIMAGE, nIndex, 0L));
- }
- int EditFilter(int nColumn, BOOL bDiscardChanges)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, HDM_EDITFILTER, nColumn, MAKELPARAM(bDiscardChanges, 0));
- }
- int ClearFilter(int nColumn)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, HDM_CLEARFILTER, nColumn, 0L);
- }
- int ClearAllFilters()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, HDM_CLEARFILTER, (WPARAM)-1, 0L);
- }
- };
- typedef CHeaderCtrlT<ATL::CWindow> CHeaderCtrl;
- ///////////////////////////////////////////////////////////////////////////////
- // CListViewCtrl
- template <class TBase>
- class CListViewCtrlT : public TBase
- {
- public:
- // Constructors
- CListViewCtrlT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CListViewCtrlT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Attributes
- static LPCTSTR GetWndClassName()
- {
- return WC_LISTVIEW;
- }
- COLORREF GetBkColor() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, LVM_GETBKCOLOR, 0, 0L);
- }
- BOOL SetBkColor(COLORREF cr)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SETBKCOLOR, 0, cr);
- }
- CImageList GetImageList(int nImageListType) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CImageList((HIMAGELIST)::SendMessage(this->m_hWnd, LVM_GETIMAGELIST, nImageListType, 0L));
- }
- CImageList SetImageList(HIMAGELIST hImageList, int nImageList)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CImageList((HIMAGELIST)::SendMessage(this->m_hWnd, LVM_SETIMAGELIST, nImageList, (LPARAM)hImageList));
- }
- int GetItemCount() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_GETITEMCOUNT, 0, 0L);
- }
- BOOL SetItemCount(int nItems)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SETITEMCOUNT, nItems, 0L);
- }
- BOOL GetItem(LPLVITEM pItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_GETITEM, 0, (LPARAM)pItem);
- }
- BOOL SetItem(const LVITEM* pItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SETITEM, 0, (LPARAM)pItem);
- }
- BOOL SetItem(int nItem, int nSubItem, UINT nMask, LPCTSTR lpszItem,
- int nImage, UINT nState, UINT nStateMask, LPARAM lParam)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- LVITEM lvi = {};
- lvi.mask = nMask;
- lvi.iItem = nItem;
- lvi.iSubItem = nSubItem;
- lvi.stateMask = nStateMask;
- lvi.state = nState;
- lvi.pszText = (LPTSTR) lpszItem;
- lvi.iImage = nImage;
- lvi.lParam = lParam;
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SETITEM, 0, (LPARAM)&lvi);
- }
- UINT GetItemState(int nItem, UINT nMask) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UINT)::SendMessage(this->m_hWnd, LVM_GETITEMSTATE, nItem, nMask);
- }
- BOOL SetItemState(int nItem, UINT nState, UINT nStateMask)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- LVITEM lvi = {};
- lvi.state = nState;
- lvi.stateMask = nStateMask;
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SETITEMSTATE, nItem, (LPARAM)&lvi);
- }
- BOOL SetItemState(int nItem, LPLVITEM pItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SETITEMSTATE, nItem, (LPARAM)pItem);
- }
- BOOL GetItemText(int nItem, int nSubItem, BSTR& bstrText) const
- {
- USES_CONVERSION;
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(bstrText == NULL);
- LVITEM lvi = {};
- lvi.iSubItem = nSubItem;
- LPTSTR lpstrText = NULL;
- int nRes = 0;
- for(int nLen = 256; ; nLen *= 2)
- {
- ATLTRY(lpstrText = new TCHAR[nLen]);
- if(lpstrText == NULL)
- break;
- lpstrText[0] = NULL;
- lvi.cchTextMax = nLen;
- lvi.pszText = lpstrText;
- nRes = (int)::SendMessage(this->m_hWnd, LVM_GETITEMTEXT, (WPARAM)nItem, (LPARAM)&lvi);
- if(nRes < nLen - 1)
- break;
- delete [] lpstrText;
- lpstrText = NULL;
- }
- if(lpstrText != NULL)
- {
- if(nRes != 0)
- bstrText = ::SysAllocString(T2OLE(lpstrText));
- delete [] lpstrText;
- }
- return (bstrText != NULL) ? TRUE : FALSE;
- }
- #ifdef __ATLSTR_H__
- int GetItemText(int nItem, int nSubItem, ATL::CString& strText) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- LVITEM lvi = {};
- lvi.iSubItem = nSubItem;
- strText.Empty();
- int nRes = 0;
- for(int nLen = 256; ; nLen *= 2)
- {
- lvi.cchTextMax = nLen;
- lvi.pszText = strText.GetBufferSetLength(nLen);
- if(lvi.pszText == NULL)
- {
- nRes = 0;
- break;
- }
- nRes = (int)::SendMessage(this->m_hWnd, LVM_GETITEMTEXT, (WPARAM)nItem, (LPARAM)&lvi);
- if(nRes < nLen - 1)
- break;
- }
- strText.ReleaseBuffer();
- return nRes;
- }
- #endif // __ATLSTR_H__
- int GetItemText(int nItem, int nSubItem, LPTSTR lpszText, int nLen) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- LVITEM lvi = {};
- lvi.iSubItem = nSubItem;
- lvi.cchTextMax = nLen;
- lvi.pszText = lpszText;
- return (int)::SendMessage(this->m_hWnd, LVM_GETITEMTEXT, (WPARAM)nItem, (LPARAM)&lvi);
- }
- BOOL SetItemText(int nItem, int nSubItem, LPCTSTR lpszText)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return SetItem(nItem, nSubItem, LVIF_TEXT, lpszText, 0, 0, 0, 0);
- }
- DWORD_PTR GetItemData(int nItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- LVITEM lvi = {};
- lvi.iItem = nItem;
- lvi.mask = LVIF_PARAM;
- BOOL bRet = (BOOL)::SendMessage(this->m_hWnd, LVM_GETITEM, 0, (LPARAM)&lvi);
- return (DWORD_PTR)(bRet ? lvi.lParam : NULL);
- }
- BOOL SetItemData(int nItem, DWORD_PTR dwData)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return SetItem(nItem, 0, LVIF_PARAM, NULL, 0, 0, 0, (LPARAM)dwData);
- }
- UINT GetCallbackMask() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UINT)::SendMessage(this->m_hWnd, LVM_GETCALLBACKMASK, 0, 0L);
- }
- BOOL SetCallbackMask(UINT nMask)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SETCALLBACKMASK, nMask, 0L);
- }
- BOOL GetItemPosition(int nItem, LPPOINT lpPoint) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_GETITEMPOSITION, nItem, (LPARAM)lpPoint);
- }
- BOOL SetItemPosition(int nItem, POINT pt)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(((this->GetStyle() & LVS_TYPEMASK) == LVS_ICON) || ((this->GetStyle() & LVS_TYPEMASK) == LVS_SMALLICON));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SETITEMPOSITION32, nItem, (LPARAM)&pt);
- }
- BOOL SetItemPosition(int nItem, int x, int y)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(((this->GetStyle() & LVS_TYPEMASK) == LVS_ICON) || ((this->GetStyle() & LVS_TYPEMASK) == LVS_SMALLICON));
- POINT pt = { x, y };
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SETITEMPOSITION32, nItem, (LPARAM)&pt);
- }
- int GetStringWidth(LPCTSTR lpsz) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_GETSTRINGWIDTH, 0, (LPARAM)lpsz);
- }
- CEdit GetEditControl() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CEdit((HWND)::SendMessage(this->m_hWnd, LVM_GETEDITCONTROL, 0, 0L));
- }
- BOOL GetColumn(int nCol, LVCOLUMN* pColumn) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_GETCOLUMN, nCol, (LPARAM)pColumn);
- }
- BOOL SetColumn(int nCol, const LVCOLUMN* pColumn)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SETCOLUMN, nCol, (LPARAM)pColumn);
- }
- int GetColumnWidth(int nCol) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_GETCOLUMNWIDTH, nCol, 0L);
- }
- BOOL SetColumnWidth(int nCol, int cx)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SETCOLUMNWIDTH, nCol, MAKELPARAM(cx, 0));
- }
- BOOL GetViewRect(LPRECT lpRect) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_GETVIEWRECT, 0, (LPARAM)lpRect);
- }
- COLORREF GetTextColor() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, LVM_GETTEXTCOLOR, 0, 0L);
- }
- BOOL SetTextColor(COLORREF cr)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SETTEXTCOLOR, 0, cr);
- }
- COLORREF GetTextBkColor() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, LVM_GETTEXTBKCOLOR, 0, 0L);
- }
- BOOL SetTextBkColor(COLORREF cr)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SETTEXTBKCOLOR, 0, cr);
- }
- int GetTopIndex() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_GETTOPINDEX, 0, 0L);
- }
- int GetCountPerPage() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_GETCOUNTPERPAGE, 0, 0L);
- }
- BOOL GetOrigin(LPPOINT lpPoint) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_GETORIGIN, 0, (LPARAM)lpPoint);
- }
- UINT GetSelectedCount() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UINT)::SendMessage(this->m_hWnd, LVM_GETSELECTEDCOUNT, 0, 0L);
- }
- BOOL GetItemRect(int nItem, LPRECT lpRect, UINT nCode) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- lpRect->left = nCode;
- return (BOOL)::SendMessage(this->m_hWnd, LVM_GETITEMRECT, (WPARAM)nItem, (LPARAM)lpRect);
- }
- HCURSOR GetHotCursor() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HCURSOR)::SendMessage(this->m_hWnd, LVM_GETHOTCURSOR, 0, 0L);
- }
- HCURSOR SetHotCursor(HCURSOR hHotCursor)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HCURSOR)::SendMessage(this->m_hWnd, LVM_SETHOTCURSOR, 0, (LPARAM)hHotCursor);
- }
- int GetHotItem() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_GETHOTITEM, 0, 0L);
- }
- int SetHotItem(int nIndex)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_SETHOTITEM, nIndex, 0L);
- }
- BOOL GetColumnOrderArray(int nCount, int* lpnArray) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_GETCOLUMNORDERARRAY, nCount, (LPARAM)lpnArray);
- }
- BOOL SetColumnOrderArray(int nCount, int* lpnArray)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SETCOLUMNORDERARRAY, nCount, (LPARAM)lpnArray);
- }
- CHeaderCtrl GetHeader() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CHeaderCtrl((HWND)::SendMessage(this->m_hWnd, LVM_GETHEADER, 0, 0L));
- }
- BOOL GetSubItemRect(int nItem, int nSubItem, int nFlag, LPRECT lpRect) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & LVS_TYPEMASK) == LVS_REPORT);
- ATLASSERT(lpRect != NULL);
- lpRect->top = nSubItem;
- lpRect->left = nFlag;
- return (BOOL)::SendMessage(this->m_hWnd, LVM_GETSUBITEMRECT, nItem, (LPARAM)lpRect);
- }
- DWORD SetIconSpacing(int cx, int cy)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & LVS_TYPEMASK) == LVS_ICON);
- return (DWORD)::SendMessage(this->m_hWnd, LVM_SETICONSPACING, 0, MAKELPARAM(cx, cy));
- }
- int GetISearchString(LPTSTR lpstr) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_GETISEARCHSTRING, 0, (LPARAM)lpstr);
- }
- void GetItemSpacing(SIZE& sizeSpacing, BOOL bSmallIconView = FALSE) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- DWORD dwRet = (DWORD)::SendMessage(this->m_hWnd, LVM_GETITEMSPACING, bSmallIconView, 0L);
- sizeSpacing.cx = GET_X_LPARAM(dwRet);
- sizeSpacing.cy = GET_Y_LPARAM(dwRet);
- }
- // single-selection only
- int GetSelectedIndex() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & LVS_SINGLESEL) != 0);
- return (int)::SendMessage(this->m_hWnd, LVM_GETNEXTITEM, (WPARAM)-1, MAKELPARAM(LVNI_ALL | LVNI_SELECTED, 0));
- }
- BOOL GetSelectedItem(LPLVITEM pItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & LVS_SINGLESEL) != 0);
- ATLASSERT(pItem != NULL);
- pItem->iItem = (int)::SendMessage(this->m_hWnd, LVM_GETNEXTITEM, (WPARAM)-1, MAKELPARAM(LVNI_ALL | LVNI_SELECTED, 0));
- if(pItem->iItem == -1)
- return FALSE;
- return (BOOL)::SendMessage(this->m_hWnd, LVM_GETITEM, 0, (LPARAM)pItem);
- }
- // extended list view styles
- DWORD GetExtendedListViewStyle() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0L);
- }
- // dwExMask = 0 means all styles
- DWORD SetExtendedListViewStyle(DWORD dwExStyle, DWORD dwExMask = 0)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, dwExMask, dwExStyle);
- }
- // checkboxes only
- BOOL GetCheckState(int nIndex) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((GetExtendedListViewStyle() & LVS_EX_CHECKBOXES) != 0);
- UINT uRet = GetItemState(nIndex, LVIS_STATEIMAGEMASK);
- return (uRet >> 12) - 1;
- }
- BOOL SetCheckState(int nItem, BOOL bCheck)
- {
- int nCheck = bCheck ? 2 : 1; // one based index
- return SetItemState(nItem, INDEXTOSTATEIMAGEMASK(nCheck), LVIS_STATEIMAGEMASK);
- }
- // view type
- DWORD GetViewType() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (this->GetStyle() & LVS_TYPEMASK);
- }
- DWORD SetViewType(DWORD dwType)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((dwType == LVS_ICON) || (dwType == LVS_SMALLICON) || (dwType == LVS_LIST) || (dwType == LVS_REPORT));
- DWORD dwOldType = GetViewType();
- if(dwType != dwOldType)
- this->ModifyStyle(LVS_TYPEMASK, (dwType & LVS_TYPEMASK));
- return dwOldType;
- }
- BOOL GetBkImage(LPLVBKIMAGE plvbki) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_GETBKIMAGE, 0, (LPARAM)plvbki);
- }
- BOOL SetBkImage(LPLVBKIMAGE plvbki)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SETBKIMAGE, 0, (LPARAM)plvbki);
- }
- int GetSelectionMark() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_GETSELECTIONMARK, 0, 0L);
- }
- int SetSelectionMark(int nIndex)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_SETSELECTIONMARK, 0, nIndex);
- }
- BOOL GetWorkAreas(int nWorkAreas, LPRECT lpRect) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_GETWORKAREAS, nWorkAreas, (LPARAM)lpRect);
- }
- BOOL SetWorkAreas(int nWorkAreas, LPRECT lpRect)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SETWORKAREAS, nWorkAreas, (LPARAM)lpRect);
- }
- DWORD GetHoverTime() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((GetExtendedListViewStyle() & (LVS_EX_TRACKSELECT | LVS_EX_ONECLICKACTIVATE | LVS_EX_TWOCLICKACTIVATE)) != 0);
- return (DWORD)::SendMessage(this->m_hWnd, LVM_GETHOVERTIME, 0, 0L);
- }
- DWORD SetHoverTime(DWORD dwHoverTime)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((GetExtendedListViewStyle() & (LVS_EX_TRACKSELECT | LVS_EX_ONECLICKACTIVATE | LVS_EX_TWOCLICKACTIVATE)) != 0);
- return (DWORD)::SendMessage(this->m_hWnd, LVM_SETHOVERTIME, 0, dwHoverTime);
- }
- BOOL GetNumberOfWorkAreas(int* pnWorkAreas) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_GETNUMBEROFWORKAREAS, 0, (LPARAM)pnWorkAreas);
- }
- BOOL SetItemCountEx(int nItems, DWORD dwFlags)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(((this->GetStyle() & LVS_OWNERDATA) != 0) && (((this->GetStyle() & LVS_TYPEMASK) == LVS_REPORT) || ((this->GetStyle() & LVS_TYPEMASK) == LVS_LIST)));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SETITEMCOUNT, nItems, dwFlags);
- }
- CToolTipCtrl GetToolTips() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CToolTipCtrl((HWND)::SendMessage(this->m_hWnd, LVM_GETTOOLTIPS, 0, 0L));
- }
- CToolTipCtrl SetToolTips(HWND hWndTT)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CToolTipCtrl((HWND)::SendMessage(this->m_hWnd, LVM_SETTOOLTIPS, (WPARAM)hWndTT, 0L));
- }
- BOOL GetUnicodeFormat() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_GETUNICODEFORMAT, 0, 0L);
- }
- BOOL SetUnicodeFormat(BOOL bUnicode = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SETUNICODEFORMAT, bUnicode, 0L);
- }
- int GetSelectedColumn() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_GETSELECTEDCOLUMN, 0, 0L);
- }
- void SetSelectedColumn(int nColumn)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, LVM_SETSELECTEDCOLUMN, nColumn, 0L);
- }
- DWORD GetView() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, LVM_GETVIEW, 0, 0L);
- }
- int SetView(DWORD dwView)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_SETVIEW, dwView, 0L);
- }
- BOOL IsGroupViewEnabled() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_ISGROUPVIEWENABLED, 0, 0L);
- }
- int GetGroupInfo(int nGroupID, PLVGROUP pGroup) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_GETGROUPINFO, nGroupID, (LPARAM)pGroup);
- }
- int SetGroupInfo(int nGroupID, PLVGROUP pGroup)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_SETGROUPINFO, nGroupID, (LPARAM)pGroup);
- }
- void GetGroupMetrics(PLVGROUPMETRICS pGroupMetrics) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, LVM_GETGROUPMETRICS, 0, (LPARAM)pGroupMetrics);
- }
- void SetGroupMetrics(PLVGROUPMETRICS pGroupMetrics)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, LVM_SETGROUPMETRICS, 0, (LPARAM)pGroupMetrics);
- }
- void GetTileViewInfo(PLVTILEVIEWINFO pTileViewInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, LVM_GETTILEVIEWINFO, 0, (LPARAM)pTileViewInfo);
- }
- BOOL SetTileViewInfo(PLVTILEVIEWINFO pTileViewInfo)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SETTILEVIEWINFO, 0, (LPARAM)pTileViewInfo);
- }
- void GetTileInfo(PLVTILEINFO pTileInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, LVM_GETTILEINFO, 0, (LPARAM)pTileInfo);
- }
- BOOL SetTileInfo(PLVTILEINFO pTileInfo)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SETTILEINFO, 0, (LPARAM)pTileInfo);
- }
- BOOL GetInsertMark(LPLVINSERTMARK pInsertMark) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_GETINSERTMARK, 0, (LPARAM)pInsertMark);
- }
- BOOL SetInsertMark(LPLVINSERTMARK pInsertMark)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SETINSERTMARK, 0, (LPARAM)pInsertMark);
- }
- int GetInsertMarkRect(LPRECT lpRect) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_GETINSERTMARKRECT, 0, (LPARAM)lpRect);
- }
- COLORREF GetInsertMarkColor() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, LVM_GETINSERTMARKCOLOR, 0, 0L);
- }
- COLORREF SetInsertMarkColor(COLORREF clr)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, LVM_SETINSERTMARKCOLOR, 0, clr);
- }
- COLORREF GetOutlineColor() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, LVM_GETOUTLINECOLOR, 0, 0L);
- }
- COLORREF SetOutlineColor(COLORREF clr)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, LVM_SETOUTLINECOLOR, 0, clr);
- }
- #if (_WIN32_WINNT >= 0x0600)
- int GetGroupCount() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_GETGROUPCOUNT, 0, 0L);
- }
- BOOL GetGroupInfoByIndex(int nIndex, PLVGROUP pGroup) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_GETGROUPINFOBYINDEX, nIndex, (LPARAM)pGroup);
- }
- BOOL GetGroupRect(int nGroupID, int nType, LPRECT lpRect) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(lpRect != NULL);
- if(lpRect != NULL)
- lpRect->top = nType;
- return (BOOL)::SendMessage(this->m_hWnd, LVM_GETGROUPRECT, nGroupID, (LPARAM)lpRect);
- }
- UINT GetGroupState(int nGroupID, UINT uMask) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UINT)::SendMessage(this->m_hWnd, LVM_GETGROUPSTATE, nGroupID, (LPARAM)uMask);
- }
- int GetFocusedGroup() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_GETFOCUSEDGROUP, 0, 0L);
- }
- BOOL GetEmptyText(LPWSTR lpstrText, int cchText) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_GETEMPTYTEXT, cchText, (LPARAM)lpstrText);
- }
- BOOL GetFooterRect(LPRECT lpRect) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_GETFOOTERRECT, 0, (LPARAM)lpRect);
- }
- BOOL GetFooterInfo(LPLVFOOTERINFO lpFooterInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_GETFOOTERINFO, 0, (LPARAM)lpFooterInfo);
- }
- BOOL GetFooterItemRect(int nItem, LPRECT lpRect) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_GETFOOTERITEMRECT, nItem, (LPARAM)lpRect);
- }
- BOOL GetFooterItem(int nItem, LPLVFOOTERITEM lpFooterItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_GETFOOTERITEM, nItem, (LPARAM)lpFooterItem);
- }
- BOOL GetItemIndexRect(PLVITEMINDEX pItemIndex, int nSubItem, int nType, LPRECT lpRect) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(pItemIndex != NULL);
- ATLASSERT(lpRect != NULL);
- if(lpRect != NULL)
- {
- lpRect->top = nSubItem;
- lpRect->left = nType;
- }
- return (BOOL)::SendMessage(this->m_hWnd, LVM_GETITEMINDEXRECT, (WPARAM)pItemIndex, (LPARAM)lpRect);
- }
- BOOL SetItemIndexState(PLVITEMINDEX pItemIndex, UINT uState, UINT dwMask)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- LVITEM lvi = {};
- lvi.state = uState;
- lvi.stateMask = dwMask;
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SETITEMINDEXSTATE, (WPARAM)pItemIndex, (LPARAM)&lvi);
- }
- BOOL GetNextItemIndex(PLVITEMINDEX pItemIndex, WORD wFlags) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_GETNEXTITEMINDEX, (WPARAM)pItemIndex, MAKELPARAM(wFlags, 0));
- }
- #endif // (_WIN32_WINNT >= 0x0600)
- // Operations
- int InsertColumn(int nCol, const LVCOLUMN* pColumn)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_INSERTCOLUMN, nCol, (LPARAM)pColumn);
- }
- int InsertColumn(int nCol, LPCTSTR lpszColumnHeading, int nFormat = LVCFMT_LEFT,
- int nWidth = -1, int nSubItem = -1, int iImage = -1, int iOrder = -1)
- {
- LVCOLUMN column = {};
- column.mask = LVCF_TEXT | LVCF_FMT;
- column.pszText = (LPTSTR)lpszColumnHeading;
- column.fmt = nFormat;
- if (nWidth != -1)
- {
- column.mask |= LVCF_WIDTH;
- column.cx = nWidth;
- }
- if (nSubItem != -1)
- {
- column.mask |= LVCF_SUBITEM;
- column.iSubItem = nSubItem;
- }
- if (iImage != -1)
- {
- column.mask |= LVCF_IMAGE;
- column.iImage = iImage;
- }
- if (iOrder != -1)
- {
- column.mask |= LVCF_ORDER;
- column.iOrder = iOrder;
- }
- return InsertColumn(nCol, &column);
- }
- BOOL DeleteColumn(int nCol)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_DELETECOLUMN, nCol, 0L);
- }
- int InsertItem(UINT nMask, int nItem, LPCTSTR lpszItem, UINT nState, UINT nStateMask, int nImage, LPARAM lParam)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- LVITEM item = {};
- item.mask = nMask;
- item.iItem = nItem;
- item.iSubItem = 0;
- item.pszText = (LPTSTR)lpszItem;
- item.state = nState;
- item.stateMask = nStateMask;
- item.iImage = nImage;
- item.lParam = lParam;
- return InsertItem(&item);
- }
- int InsertItem(const LVITEM* pItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_INSERTITEM, 0, (LPARAM)pItem);
- }
- int InsertItem(int nItem, LPCTSTR lpszItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return InsertItem(LVIF_TEXT, nItem, lpszItem, 0, 0, 0, 0);
- }
- int InsertItem(int nItem, LPCTSTR lpszItem, int nImage)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return InsertItem(LVIF_TEXT|LVIF_IMAGE, nItem, lpszItem, 0, 0, nImage, 0);
- }
- int GetNextItem(int nItem, int nFlags) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_GETNEXTITEM, nItem, MAKELPARAM(nFlags, 0));
- }
- BOOL DeleteItem(int nItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_DELETEITEM, nItem, 0L);
- }
- BOOL DeleteAllItems()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_DELETEALLITEMS, 0, 0L);
- }
- int FindItem(LVFINDINFO* pFindInfo, int nStart = -1) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_FINDITEM, nStart, (LPARAM)pFindInfo);
- }
- int FindItem(LPCTSTR lpstrFind, bool bPartial = true, bool bWrap = false, int nStart = -1) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- LVFINDINFO lvfi = {};
- lvfi.flags = LVFI_STRING | (bWrap ? LVFI_WRAP : 0) | (bPartial ? LVFI_PARTIAL : 0);
- lvfi.psz = lpstrFind;
- return (int)::SendMessage(this->m_hWnd, LVM_FINDITEM, nStart, (LPARAM)&lvfi);
- }
- int HitTest(LVHITTESTINFO* pHitTestInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_HITTEST, 0, (LPARAM)pHitTestInfo);
- }
- int HitTest(POINT pt, UINT* pFlags) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- LVHITTESTINFO hti = {};
- hti.pt = pt;
- int nRes = (int)::SendMessage(this->m_hWnd, LVM_HITTEST, 0, (LPARAM)&hti);
- if (pFlags != NULL)
- *pFlags = hti.flags;
- return nRes;
- }
- BOOL EnsureVisible(int nItem, BOOL bPartialOK)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_ENSUREVISIBLE, nItem, MAKELPARAM(bPartialOK, 0));
- }
- BOOL Scroll(int cx, int cy)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SCROLL, cx, cy);
- }
- BOOL Scroll(SIZE size)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SCROLL, size.cx, size.cy);
- }
- BOOL RedrawItems(int nFirst, int nLast)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_REDRAWITEMS, nFirst, nLast);
- }
- BOOL Arrange(UINT nCode)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_ARRANGE, nCode, 0L);
- }
- CEdit EditLabel(int nItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CEdit((HWND)::SendMessage(this->m_hWnd, LVM_EDITLABEL, nItem, 0L));
- }
- BOOL Update(int nItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_UPDATE, nItem, 0L);
- }
- BOOL SortItems(PFNLVCOMPARE pfnCompare, LPARAM lParamSort)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SORTITEMS, (WPARAM)lParamSort, (LPARAM)pfnCompare);
- }
- CImageList RemoveImageList(int nImageList)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CImageList((HIMAGELIST)::SendMessage(this->m_hWnd, LVM_SETIMAGELIST, (WPARAM)nImageList, NULL));
- }
- CImageList CreateDragImage(int nItem, LPPOINT lpPoint)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CImageList((HIMAGELIST)::SendMessage(this->m_hWnd, LVM_CREATEDRAGIMAGE, nItem, (LPARAM)lpPoint));
- }
- DWORD ApproximateViewRect(int cx = -1, int cy = -1, int nCount = -1)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, LVM_APPROXIMATEVIEWRECT, nCount, MAKELPARAM(cx, cy));
- }
- int SubItemHitTest(LPLVHITTESTINFO lpInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_SUBITEMHITTEST, 0, (LPARAM)lpInfo);
- }
- int AddColumn(LPCTSTR strColumn, int nItem, int nSubItem = -1,
- int nMask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM,
- int nFmt = LVCFMT_LEFT)
- {
- const int cxOffset = 15;
- ATLASSERT(::IsWindow(this->m_hWnd));
- LVCOLUMN lvc = {};
- lvc.mask = nMask;
- lvc.fmt = nFmt;
- lvc.pszText = (LPTSTR)strColumn;
- lvc.cx = GetStringWidth(lvc.pszText) + cxOffset;
- if(nMask & LVCF_SUBITEM)
- lvc.iSubItem = (nSubItem != -1) ? nSubItem : nItem;
- return InsertColumn(nItem, &lvc);
- }
- int AddItem(int nItem, int nSubItem, LPCTSTR strItem, int nImageIndex = -3)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- LVITEM lvItem = {};
- lvItem.mask = LVIF_TEXT;
- lvItem.iItem = nItem;
- lvItem.iSubItem = nSubItem;
- lvItem.pszText = (LPTSTR)strItem;
- if(nImageIndex != -3)
- {
- lvItem.mask |= LVIF_IMAGE;
- lvItem.iImage = nImageIndex;
- }
- if(nSubItem == 0)
- return InsertItem(&lvItem);
- return SetItem(&lvItem) ? nItem : -1;
- }
- BOOL SortItemsEx(PFNLVCOMPARE pfnCompare, LPARAM lParamSort)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SORTITEMSEX, (WPARAM)lParamSort, (LPARAM)pfnCompare);
- }
- int InsertGroup(int nItem, PLVGROUP pGroup)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_INSERTGROUP, nItem, (LPARAM)pGroup);
- }
- int AddGroup(PLVGROUP pGroup)
- {
- return InsertGroup(-1, pGroup);
- }
- int RemoveGroup(int nGroupID)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_REMOVEGROUP, nGroupID, 0L);
- }
- void MoveGroup(int nGroupID, int nItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, LVM_MOVEGROUP, nGroupID, nItem);
- }
- void MoveItemToGroup(int nItem, int nGroupID)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, LVM_MOVEITEMTOGROUP, nItem, nGroupID);
- }
- int EnableGroupView(BOOL bEnable)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_ENABLEGROUPVIEW, bEnable, 0L);
- }
- int SortGroups(PFNLVGROUPCOMPARE pCompareFunc, LPVOID lpVoid = NULL)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_SORTGROUPS, (WPARAM)pCompareFunc, (LPARAM)lpVoid);
- }
- void InsertGroupSorted(PLVINSERTGROUPSORTED pInsertGroupSorted)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, LVM_INSERTGROUPSORTED, (WPARAM)pInsertGroupSorted, 0L);
- }
- void RemoveAllGroups()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, LVM_REMOVEALLGROUPS, 0, 0L);
- }
- BOOL HasGroup(int nGroupID)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_HASGROUP, nGroupID, 0L);
- }
- BOOL InsertMarkHitTest(LPPOINT lpPoint, LPLVINSERTMARK pInsertMark) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_INSERTMARKHITTEST, (WPARAM)lpPoint, (LPARAM)pInsertMark);
- }
- BOOL SetInfoTip(PLVSETINFOTIP pSetInfoTip)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_SETINFOTIP, 0, (LPARAM)pSetInfoTip);
- }
- void CancelEditLabel()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, LVM_CANCELEDITLABEL, 0, 0L);
- }
- UINT MapIndexToID(int nIndex) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UINT)::SendMessage(this->m_hWnd, LVM_MAPINDEXTOID, nIndex, 0L);
- }
- int MapIDToIndex(UINT uID) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_MAPIDTOINDEX, uID, 0L);
- }
- BOOL IsItemVisible(int nItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LVM_ISITEMVISIBLE, nItem, 0L);
- }
- #if (_WIN32_WINNT >= 0x0600)
- int HitTestEx(LPLVHITTESTINFO lpHitTestInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_HITTEST, (WPARAM)-1, (LPARAM)lpHitTestInfo);
- }
- int HitTestEx(POINT pt, UINT* pFlags) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- LVHITTESTINFO hti = {};
- hti.pt = pt;
- int nRes = (int)::SendMessage(this->m_hWnd, LVM_HITTEST, (WPARAM)-1, (LPARAM)&hti);
- if (pFlags != NULL)
- *pFlags = hti.flags;
- return nRes;
- }
- int SubItemHitTestEx(LPLVHITTESTINFO lpHitTestInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LVM_SUBITEMHITTEST, (WPARAM)-1, (LPARAM)lpHitTestInfo);
- }
- #endif // (_WIN32_WINNT >= 0x0600)
- // Note: selects only one item
- BOOL SelectItem(int nIndex) // -1 to select none
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- BOOL bRet = FALSE;
- if(nIndex != -1)
- {
- // multi-selection only: de-select all items
- if((this->GetStyle() & LVS_SINGLESEL) == 0)
- SetItemState(-1, 0, LVIS_SELECTED);
- bRet = SetItemState(nIndex, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
- if(bRet)
- {
- SetSelectionMark(nIndex);
- bRet = EnsureVisible(nIndex, FALSE);
- }
- }
- else // no item specified, just de-select
- {
- bRet = SetItemState(-1, 0, LVIS_SELECTED);
- }
- return bRet;
- }
- // multi-selection only
- BOOL SelectAllItems(bool bSelect = true)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & LVS_SINGLESEL) == 0);
- return SetItemState(-1, bSelect ? LVIS_SELECTED : 0, LVIS_SELECTED);
- }
- };
- typedef CListViewCtrlT<ATL::CWindow> CListViewCtrl;
- ///////////////////////////////////////////////////////////////////////////////
- // CTreeViewCtrl
- template <class TBase>
- class CTreeViewCtrlT : public TBase
- {
- public:
- // Constructors
- CTreeViewCtrlT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CTreeViewCtrlT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Attributes
- static LPCTSTR GetWndClassName()
- {
- return WC_TREEVIEW;
- }
- UINT GetCount() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UINT)::SendMessage(this->m_hWnd, TVM_GETCOUNT, 0, 0L);
- }
- UINT GetIndent() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UINT)::SendMessage(this->m_hWnd, TVM_GETINDENT, 0, 0L);
- }
- void SetIndent(UINT nIndent)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TVM_SETINDENT, nIndent, 0L);
- }
- CImageList GetImageList(int nImageListType = TVSIL_NORMAL) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CImageList((HIMAGELIST)::SendMessage(this->m_hWnd, TVM_GETIMAGELIST, (WPARAM)nImageListType, 0L));
- }
- CImageList SetImageList(HIMAGELIST hImageList, int nImageListType = TVSIL_NORMAL)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CImageList((HIMAGELIST)::SendMessage(this->m_hWnd, TVM_SETIMAGELIST, (WPARAM)nImageListType, (LPARAM)hImageList));
- }
- BOOL GetItem(LPTVITEM pItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TVM_GETITEM, 0, (LPARAM)pItem);
- }
- BOOL SetItem(LPTVITEM pItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TVM_SETITEM, 0, (LPARAM)pItem);
- }
- BOOL SetItem(HTREEITEM hItem, UINT nMask, LPCTSTR lpszItem, int nImage,
- int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- TVITEM item = {};
- item.hItem = hItem;
- item.mask = nMask;
- item.pszText = (LPTSTR) lpszItem;
- item.iImage = nImage;
- item.iSelectedImage = nSelectedImage;
- item.state = nState;
- item.stateMask = nStateMask;
- item.lParam = lParam;
- return (BOOL)::SendMessage(this->m_hWnd, TVM_SETITEM, 0, (LPARAM)&item);
- }
- BOOL GetItemText(HTREEITEM hItem, LPTSTR lpstrText, int nLen) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(lpstrText != NULL);
- TVITEM item = {};
- item.hItem = hItem;
- item.mask = TVIF_TEXT;
- item.pszText = lpstrText;
- item.cchTextMax = nLen;
- return (BOOL)::SendMessage(this->m_hWnd, TVM_GETITEM, 0, (LPARAM)&item);
- }
- BOOL GetItemText(HTREEITEM hItem, BSTR& bstrText) const
- {
- USES_CONVERSION;
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(bstrText == NULL);
- TVITEM item = {};
- item.hItem = hItem;
- item.mask = TVIF_TEXT;
- LPTSTR lpstrText = NULL;
- BOOL bRet = FALSE;
- for(int nLen = 256; ; nLen *= 2)
- {
- ATLTRY(lpstrText = new TCHAR[nLen]);
- if(lpstrText == NULL)
- break;
- lpstrText[0] = NULL;
- item.pszText = lpstrText;
- item.cchTextMax = nLen;
- bRet = (BOOL)::SendMessage(this->m_hWnd, TVM_GETITEM, 0, (LPARAM)&item);
- if(!bRet || (lstrlen(item.pszText) < (nLen - 1)))
- break;
- delete [] lpstrText;
- lpstrText = NULL;
- }
- if(lpstrText != NULL)
- {
- if(bRet)
- bstrText = ::SysAllocString(T2OLE(lpstrText));
- delete [] lpstrText;
- }
- return (bstrText != NULL) ? TRUE : FALSE;
- }
- #ifdef __ATLSTR_H__
- BOOL GetItemText(HTREEITEM hItem, ATL::CString& strText) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- TVITEM item = {};
- item.hItem = hItem;
- item.mask = TVIF_TEXT;
- strText.Empty();
- BOOL bRet = FALSE;
- for(int nLen = 256; ; nLen *= 2)
- {
- item.pszText = strText.GetBufferSetLength(nLen);
- if(item.pszText == NULL)
- {
- bRet = FALSE;
- break;
- }
- item.cchTextMax = nLen;
- bRet = (BOOL)::SendMessage(this->m_hWnd, TVM_GETITEM, 0, (LPARAM)&item);
- if(!bRet || (lstrlen(item.pszText) < (nLen - 1)))
- break;
- }
- strText.ReleaseBuffer();
- return bRet;
- }
- #endif // __ATLSTR_H__
- BOOL SetItemText(HTREEITEM hItem, LPCTSTR lpszItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return SetItem(hItem, TVIF_TEXT, lpszItem, 0, 0, 0, 0, NULL);
- }
- BOOL GetItemImage(HTREEITEM hItem, int& nImage, int& nSelectedImage) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- TVITEM item = {};
- item.hItem = hItem;
- item.mask = TVIF_IMAGE|TVIF_SELECTEDIMAGE;
- BOOL bRes = (BOOL)::SendMessage(this->m_hWnd, TVM_GETITEM, 0, (LPARAM)&item);
- if (bRes)
- {
- nImage = item.iImage;
- nSelectedImage = item.iSelectedImage;
- }
- return bRes;
- }
- BOOL SetItemImage(HTREEITEM hItem, int nImage, int nSelectedImage)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return SetItem(hItem, TVIF_IMAGE|TVIF_SELECTEDIMAGE, NULL, nImage, nSelectedImage, 0, 0, NULL);
- }
- UINT GetItemState(HTREEITEM hItem, UINT nStateMask) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (((UINT)::SendMessage(this->m_hWnd, TVM_GETITEMSTATE, (WPARAM)hItem, (LPARAM)nStateMask)) & nStateMask);
- }
- BOOL SetItemState(HTREEITEM hItem, UINT nState, UINT nStateMask)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return SetItem(hItem, TVIF_STATE, NULL, 0, 0, nState, nStateMask, NULL);
- }
- DWORD_PTR GetItemData(HTREEITEM hItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- TVITEM item = {};
- item.hItem = hItem;
- item.mask = TVIF_PARAM;
- BOOL bRet = (BOOL)::SendMessage(this->m_hWnd, TVM_GETITEM, 0, (LPARAM)&item);
- return (DWORD_PTR)(bRet ? item.lParam : NULL);
- }
- BOOL SetItemData(HTREEITEM hItem, DWORD_PTR dwData)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return SetItem(hItem, TVIF_PARAM, NULL, 0, 0, 0, 0, (LPARAM)dwData);
- }
- CEdit GetEditControl() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CEdit((HWND)::SendMessage(this->m_hWnd, TVM_GETEDITCONTROL, 0, 0L));
- }
- UINT GetVisibleCount() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UINT)::SendMessage(this->m_hWnd, TVM_GETVISIBLECOUNT, 0, 0L);
- }
- BOOL GetItemRect(HTREEITEM hItem, LPRECT lpRect, BOOL bTextOnly) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- *(HTREEITEM*)lpRect = hItem;
- return (BOOL)::SendMessage(this->m_hWnd, TVM_GETITEMRECT, (WPARAM)bTextOnly, (LPARAM)lpRect);
- }
- BOOL ItemHasChildren(HTREEITEM hItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- TVITEM item = {};
- item.hItem = hItem;
- item.mask = TVIF_CHILDREN;
- ::SendMessage(this->m_hWnd, TVM_GETITEM, 0, (LPARAM)&item);
- return item.cChildren;
- }
- CToolTipCtrl GetToolTips() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CToolTipCtrl((HWND)::SendMessage(this->m_hWnd, TVM_GETTOOLTIPS, 0, 0L));
- }
- CToolTipCtrl SetToolTips(HWND hWndTT)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CToolTipCtrl((HWND)::SendMessage(this->m_hWnd, TVM_SETTOOLTIPS, (WPARAM)hWndTT, 0L));
- }
- int GetISearchString(LPTSTR lpstr) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TVM_GETISEARCHSTRING, 0, (LPARAM)lpstr);
- }
- // checkboxes only
- BOOL GetCheckState(HTREEITEM hItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & TVS_CHECKBOXES) != 0);
- UINT uRet = GetItemState(hItem, TVIS_STATEIMAGEMASK);
- return (uRet >> 12) - 1;
- }
- BOOL SetCheckState(HTREEITEM hItem, BOOL bCheck)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & TVS_CHECKBOXES) != 0);
- int nCheck = bCheck ? 2 : 1; // one based index
- return SetItemState(hItem, INDEXTOSTATEIMAGEMASK(nCheck), TVIS_STATEIMAGEMASK);
- }
- // for standard and extended checkboxes (0 = no checkbox, 1 = unchecked, 2 = checked, >2 = optional extended check states)
- UINT GetCheckStateEx(HTREEITEM hItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(this->GetImageList(TVSIL_STATE) != NULL);
- UINT uRet = GetItemState(hItem, TVIS_STATEIMAGEMASK);
- return (uRet >> 12);
- }
- BOOL SetCheckStateEx(HTREEITEM hItem, UINT uCheckState)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(this->GetImageList(TVSIL_STATE) != NULL);
- ATLASSERT(uCheckState < (UINT)::ImageList_GetImageCount(this->GetImageList(TVSIL_STATE)));
- return SetItemState(hItem, INDEXTOSTATEIMAGEMASK(uCheckState), TVIS_STATEIMAGEMASK);
- }
- COLORREF GetBkColor() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, TVM_GETBKCOLOR, 0, 0L);
- }
- COLORREF SetBkColor(COLORREF clr)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, TVM_SETBKCOLOR, 0, (LPARAM)clr);
- }
- COLORREF GetInsertMarkColor() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, TVM_GETINSERTMARKCOLOR, 0, 0L);
- }
- COLORREF SetInsertMarkColor(COLORREF clr)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, TVM_SETINSERTMARKCOLOR, 0, (LPARAM)clr);
- }
- int GetItemHeight() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TVM_GETITEMHEIGHT, 0, 0L);
- }
- int SetItemHeight(int cyHeight)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TVM_SETITEMHEIGHT, cyHeight, 0L);
- }
- int GetScrollTime() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TVM_GETSCROLLTIME, 0, 0L);
- }
- int SetScrollTime(int nScrollTime)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TVM_SETSCROLLTIME, nScrollTime, 0L);
- }
- COLORREF GetTextColor() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, TVM_GETTEXTCOLOR, 0, 0L);
- }
- COLORREF SetTextColor(COLORREF clr)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, TVM_SETTEXTCOLOR, 0, (LPARAM)clr);
- }
- BOOL GetUnicodeFormat() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TVM_GETUNICODEFORMAT, 0, 0L);
- }
- BOOL SetUnicodeFormat(BOOL bUnicode = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TVM_SETUNICODEFORMAT, bUnicode, 0L);
- }
- COLORREF GetLineColor() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, TVM_GETLINECOLOR, 0, 0L);
- }
- COLORREF SetLineColor(COLORREF clrNew /*= CLR_DEFAULT*/)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, TVM_SETLINECOLOR, 0, (LPARAM)clrNew);
- }
- BOOL GetItem(LPTVITEMEX pItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TVM_GETITEM, 0, (LPARAM)pItem);
- }
- BOOL SetItem(LPTVITEMEX pItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TVM_SETITEM, 0, (LPARAM)pItem);
- }
- DWORD GetExtendedStyle() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, TVM_GETEXTENDEDSTYLE, 0, 0L);
- }
- DWORD SetExtendedStyle(DWORD dwStyle, DWORD dwMask)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, TVM_SETEXTENDEDSTYLE, dwMask, dwStyle);
- }
- #if (_WIN32_WINNT >= 0x0600)
- BOOL SetAutoScrollInfo(UINT uPixPerSec, UINT uUpdateTime)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TVM_SETAUTOSCROLLINFO, (WPARAM)uPixPerSec, (LPARAM)uUpdateTime);
- }
- DWORD GetSelectedCount() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, TVM_GETSELECTEDCOUNT, 0, 0L);
- }
- BOOL GetItemPartRect(HTREEITEM hItem, TVITEMPART partID, LPRECT lpRect) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- TVGETITEMPARTRECTINFO gipri = { hItem, lpRect, partID };
- return (BOOL)::SendMessage(this->m_hWnd, TVM_GETITEMPARTRECT, 0, (LPARAM)&gipri);
- }
- #endif // (_WIN32_WINNT >= 0x0600)
- // Operations
- HTREEITEM InsertItem(LPTVINSERTSTRUCT lpInsertStruct)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HTREEITEM)::SendMessage(this->m_hWnd, TVM_INSERTITEM, 0, (LPARAM)lpInsertStruct);
- }
- HTREEITEM InsertItem(LPCTSTR lpszItem, int nImage,
- int nSelectedImage, HTREEITEM hParent, HTREEITEM hInsertAfter)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return InsertItem(TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE, lpszItem, nImage, nSelectedImage, 0, 0, 0, hParent, hInsertAfter);
- }
- HTREEITEM InsertItem(LPCTSTR lpszItem, HTREEITEM hParent, HTREEITEM hInsertAfter)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return InsertItem(TVIF_TEXT, lpszItem, 0, 0, 0, 0, 0, hParent, hInsertAfter);
- }
- HTREEITEM InsertItem(UINT nMask, LPCTSTR lpszItem, int nImage,
- int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam,
- HTREEITEM hParent, HTREEITEM hInsertAfter)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- TVINSERTSTRUCT tvis = {};
- tvis.hParent = hParent;
- tvis.hInsertAfter = hInsertAfter;
- tvis.item.mask = nMask;
- tvis.item.pszText = (LPTSTR) lpszItem;
- tvis.item.iImage = nImage;
- tvis.item.iSelectedImage = nSelectedImage;
- tvis.item.state = nState;
- tvis.item.stateMask = nStateMask;
- tvis.item.lParam = lParam;
- return (HTREEITEM)::SendMessage(this->m_hWnd, TVM_INSERTITEM, 0, (LPARAM)&tvis);
- }
- BOOL DeleteItem(HTREEITEM hItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TVM_DELETEITEM, 0, (LPARAM)hItem);
- }
- BOOL DeleteAllItems()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT);
- }
- BOOL Expand(HTREEITEM hItem, UINT nCode = TVE_EXPAND)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TVM_EXPAND, nCode, (LPARAM)hItem);
- }
- HTREEITEM GetNextItem(HTREEITEM hItem, UINT nCode) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, nCode, (LPARAM)hItem);
- }
- HTREEITEM GetChildItem(HTREEITEM hItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, TVGN_CHILD, (LPARAM)hItem);
- }
- HTREEITEM GetNextSiblingItem(HTREEITEM hItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, TVGN_NEXT, (LPARAM)hItem);
- }
- HTREEITEM GetPrevSiblingItem(HTREEITEM hItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, TVGN_PREVIOUS, (LPARAM)hItem);
- }
- HTREEITEM GetParentItem(HTREEITEM hItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, TVGN_PARENT, (LPARAM)hItem);
- }
- HTREEITEM GetFirstVisibleItem() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, TVGN_FIRSTVISIBLE, 0L);
- }
- HTREEITEM GetNextVisibleItem(HTREEITEM hItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, TVGN_NEXTVISIBLE, (LPARAM)hItem);
- }
- HTREEITEM GetPrevVisibleItem(HTREEITEM hItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, TVGN_PREVIOUSVISIBLE, (LPARAM)hItem);
- }
- HTREEITEM GetSelectedItem() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, TVGN_CARET, 0L);
- }
- HTREEITEM GetDropHilightItem() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, TVGN_DROPHILITE, 0L);
- }
- HTREEITEM GetRootItem() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, TVGN_ROOT, 0L);
- }
- HTREEITEM GetLastVisibleItem() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, TVGN_LASTVISIBLE, 0L);
- }
- HTREEITEM GetNextSelectedItem(HTREEITEM hItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, TVGN_NEXTSELECTED, (LPARAM)hItem);
- }
- BOOL Select(HTREEITEM hItem, UINT nCode)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TVM_SELECTITEM, nCode, (LPARAM)hItem);
- }
- BOOL SelectItem(HTREEITEM hItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TVM_SELECTITEM, TVGN_CARET, (LPARAM)hItem);
- }
- BOOL SelectDropTarget(HTREEITEM hItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TVM_SELECTITEM, TVGN_DROPHILITE, (LPARAM)hItem);
- }
- BOOL SelectSetFirstVisible(HTREEITEM hItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TVM_SELECTITEM, TVGN_FIRSTVISIBLE, (LPARAM)hItem);
- }
- CEdit EditLabel(HTREEITEM hItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CEdit((HWND)::SendMessage(this->m_hWnd, TVM_EDITLABEL, 0, (LPARAM)hItem));
- }
- BOOL EndEditLabelNow(BOOL bCancel)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TVM_ENDEDITLABELNOW, bCancel, 0L);
- }
- HTREEITEM HitTest(TVHITTESTINFO* pHitTestInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HTREEITEM)::SendMessage(this->m_hWnd, TVM_HITTEST, 0, (LPARAM)pHitTestInfo);
- }
- HTREEITEM HitTest(POINT pt, UINT* pFlags) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- TVHITTESTINFO hti = {};
- hti.pt = pt;
- HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(this->m_hWnd, TVM_HITTEST, 0, (LPARAM)&hti);
- if (pFlags != NULL)
- *pFlags = hti.flags;
- return hTreeItem;
- }
- BOOL SortChildren(HTREEITEM hItem, BOOL bRecurse = FALSE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TVM_SORTCHILDREN, (WPARAM)bRecurse, (LPARAM)hItem);
- }
- BOOL EnsureVisible(HTREEITEM hItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TVM_ENSUREVISIBLE, 0, (LPARAM)hItem);
- }
- BOOL SortChildrenCB(LPTVSORTCB pSort, BOOL bRecurse = FALSE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TVM_SORTCHILDRENCB, (WPARAM)bRecurse, (LPARAM)pSort);
- }
- CImageList RemoveImageList(int nImageList)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CImageList((HIMAGELIST)::SendMessage(this->m_hWnd, TVM_SETIMAGELIST, (WPARAM)nImageList, NULL));
- }
- CImageList CreateDragImage(HTREEITEM hItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CImageList((HIMAGELIST)::SendMessage(this->m_hWnd, TVM_CREATEDRAGIMAGE, 0, (LPARAM)hItem));
- }
- BOOL SetInsertMark(HTREEITEM hTreeItem, BOOL bAfter)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TVM_SETINSERTMARK, bAfter, (LPARAM)hTreeItem);
- }
- BOOL RemoveInsertMark()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TVM_SETINSERTMARK, 0, 0L);
- }
- HTREEITEM MapAccIDToHTREEITEM(UINT uID) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HTREEITEM)::SendMessage(this->m_hWnd, TVM_MAPACCIDTOHTREEITEM, uID, 0L);
- }
- UINT MapHTREEITEMToAccID(HTREEITEM hTreeItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UINT)::SendMessage(this->m_hWnd, TVM_MAPHTREEITEMTOACCID, (WPARAM)hTreeItem, 0L);
- }
- #if (_WIN32_WINNT >= 0x0600)
- void ShowInfoTip(HTREEITEM hItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TVM_SHOWINFOTIP, 0, (LPARAM)hItem);
- }
- #endif // (_WIN32_WINNT >= 0x0600)
- };
- typedef CTreeViewCtrlT<ATL::CWindow> CTreeViewCtrl;
- ///////////////////////////////////////////////////////////////////////////////
- // CTreeViewCtrlEx
- // forward declaration
- template <class TBase> class CTreeViewCtrlExT;
- // Note: TBase here is for CTreeViewCtrlExT, and not for CTreeItemT itself
- template <class TBase>
- class CTreeItemT
- {
- public:
- HTREEITEM m_hTreeItem;
- CTreeViewCtrlExT<TBase>* m_pTreeView;
- // Construction
- CTreeItemT(HTREEITEM hTreeItem = NULL, CTreeViewCtrlExT<TBase>* pTreeView = NULL) : m_hTreeItem(hTreeItem), m_pTreeView(pTreeView)
- { }
-
- CTreeItemT(const CTreeItemT<TBase>& posSrc)
- {
- *this = posSrc;
- }
- operator HTREEITEM() { return m_hTreeItem; }
- CTreeItemT<TBase>& operator =(const CTreeItemT<TBase>& itemSrc)
- {
- m_hTreeItem = itemSrc.m_hTreeItem;
- m_pTreeView = itemSrc.m_pTreeView;
- return *this;
- }
- // Attributes
- CTreeViewCtrlExT<TBase>* GetTreeView() const { return m_pTreeView; }
- BOOL operator !() const { return m_hTreeItem == NULL; }
- BOOL IsNull() const { return m_hTreeItem == NULL; }
-
- BOOL GetRect(LPRECT lpRect, BOOL bTextOnly) const;
- BOOL GetText(LPTSTR lpstrText, int nLen) const;
- BOOL GetText(BSTR& bstrText) const;
- #ifdef __ATLSTR_H__
- BOOL GetText(ATL::CString& strText) const;
- #endif // __ATLSTR_H__
- BOOL SetText(LPCTSTR lpszItem);
- BOOL GetImage(int& nImage, int& nSelectedImage) const;
- BOOL SetImage(int nImage, int nSelectedImage);
- UINT GetState(UINT nStateMask) const;
- BOOL SetState(UINT nState, UINT nStateMask);
- DWORD_PTR GetData() const;
- BOOL SetData(DWORD_PTR dwData);
- BOOL SetItem(UINT nMask, LPCTSTR lpszItem, int nImage, int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam);
- // Operations
- CTreeItemT<TBase> InsertAfter(LPCTSTR lpstrItem, HTREEITEM hItemAfter, int nImageIndex)
- {
- return _Insert(lpstrItem, nImageIndex, hItemAfter);
- }
- CTreeItemT<TBase> AddHead(LPCTSTR lpstrItem, int nImageIndex)
- {
- return _Insert(lpstrItem, nImageIndex, TVI_FIRST);
- }
- CTreeItemT<TBase> AddTail(LPCTSTR lpstrItem, int nImageIndex)
- {
- return _Insert(lpstrItem, nImageIndex, TVI_LAST);
- }
- CTreeItemT<TBase> GetChild() const;
- CTreeItemT<TBase> GetNext(UINT nCode) const;
- CTreeItemT<TBase> GetNextSibling() const;
- CTreeItemT<TBase> GetPrevSibling() const;
- CTreeItemT<TBase> GetParent() const;
- CTreeItemT<TBase> GetFirstVisible() const;
- CTreeItemT<TBase> GetNextVisible() const;
- CTreeItemT<TBase> GetPrevVisible() const;
- CTreeItemT<TBase> GetSelected() const;
- CTreeItemT<TBase> GetDropHilight() const;
- CTreeItemT<TBase> GetRoot() const;
- CTreeItemT<TBase> GetLastVisible() const;
- CTreeItemT<TBase> GetNextSelected() const;
- BOOL HasChildren() const;
- BOOL Delete();
- BOOL Expand(UINT nCode = TVE_EXPAND);
- BOOL Select(UINT nCode);
- BOOL Select();
- BOOL SelectDropTarget();
- BOOL SelectSetFirstVisible();
- HWND EditLabel();
- HIMAGELIST CreateDragImage();
- BOOL SortChildren(BOOL bRecurse = FALSE);
- BOOL EnsureVisible();
- CTreeItemT<TBase> _Insert(LPCTSTR lpstrItem, int nImageIndex, HTREEITEM hItemAfter);
- int GetImageIndex() const;
- BOOL SetInsertMark(BOOL bAfter);
- UINT MapHTREEITEMToAccID() const;
- #if (_WIN32_WINNT >= 0x0600)
- void ShowInfoTip();
- BOOL GetPartRect(TVITEMPART partID, LPRECT lpRect) const;
- #endif // (_WIN32_WINNT >= 0x0600)
- };
- typedef CTreeItemT<ATL::CWindow> CTreeItem;
- template <class TBase>
- class CTreeViewCtrlExT : public CTreeViewCtrlT< TBase >
- {
- public:
- // Constructors
- CTreeViewCtrlExT(HWND hWnd = NULL) : CTreeViewCtrlT< TBase >(hWnd)
- { }
- CTreeViewCtrlExT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- // Operations (overides that return CTreeItem)
- CTreeItemT<TBase> InsertItem(LPTVINSERTSTRUCT lpInsertStruct)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(this->m_hWnd, TVM_INSERTITEM, 0, (LPARAM)lpInsertStruct);
- return CTreeItemT<TBase>(hTreeItem, this);
- }
- CTreeItemT<TBase> InsertItem(LPCTSTR lpszItem, int nImage,
- int nSelectedImage, HTREEITEM hParent, HTREEITEM hInsertAfter)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return InsertItem(TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE, lpszItem, nImage, nSelectedImage, 0, 0, 0, hParent, hInsertAfter);
- }
- CTreeItemT<TBase> InsertItem(LPCTSTR lpszItem, HTREEITEM hParent, HTREEITEM hInsertAfter)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return InsertItem(TVIF_TEXT, lpszItem, 0, 0, 0, 0, 0, hParent, hInsertAfter);
- }
- CTreeItemT<TBase> GetNextItem(HTREEITEM hItem, UINT nCode) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, nCode, (LPARAM)hItem);
- return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
- }
- CTreeItemT<TBase> GetChildItem(HTREEITEM hItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, TVGN_CHILD, (LPARAM)hItem);
- return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
- }
- CTreeItemT<TBase> GetNextSiblingItem(HTREEITEM hItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, TVGN_NEXT, (LPARAM)hItem);
- return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
- }
- CTreeItemT<TBase> GetPrevSiblingItem(HTREEITEM hItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, TVGN_PREVIOUS, (LPARAM)hItem);
- return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
- }
- CTreeItemT<TBase> GetParentItem(HTREEITEM hItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, TVGN_PARENT, (LPARAM)hItem);
- return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
- }
- CTreeItemT<TBase> GetFirstVisibleItem() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, TVGN_FIRSTVISIBLE, 0L);
- return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
- }
- CTreeItemT<TBase> GetNextVisibleItem(HTREEITEM hItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, TVGN_NEXTVISIBLE, (LPARAM)hItem);
- return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
- }
- CTreeItemT<TBase> GetPrevVisibleItem(HTREEITEM hItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, TVGN_PREVIOUSVISIBLE, (LPARAM)hItem);
- return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
- }
- CTreeItemT<TBase> GetSelectedItem() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, TVGN_CARET, 0L);
- return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
- }
- CTreeItemT<TBase> GetDropHilightItem() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, TVGN_DROPHILITE, 0L);
- return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
- }
- CTreeItemT<TBase> GetRootItem() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, TVGN_ROOT, 0L);
- return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
- }
- CTreeItemT<TBase> GetLastVisibleItem() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, TVGN_LASTVISIBLE, 0L);
- return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
- }
- CTreeItemT<TBase> GetNextSelectedItem(HTREEITEM hItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(this->m_hWnd, TVM_GETNEXTITEM, TVGN_NEXTSELECTED, (LPARAM)hItem);
- return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
- }
- CTreeItemT<TBase> HitTest(TVHITTESTINFO* pHitTestInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(this->m_hWnd, TVM_HITTEST, 0, (LPARAM)pHitTestInfo);
- return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
- }
- CTreeItemT<TBase> InsertItem(UINT nMask, LPCTSTR lpszItem, int nImage,
- int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam,
- HTREEITEM hParent, HTREEITEM hInsertAfter)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- TVINSERTSTRUCT tvis = {};
- tvis.hParent = hParent;
- tvis.hInsertAfter = hInsertAfter;
- tvis.item.mask = nMask;
- tvis.item.pszText = (LPTSTR) lpszItem;
- tvis.item.iImage = nImage;
- tvis.item.iSelectedImage = nSelectedImage;
- tvis.item.state = nState;
- tvis.item.stateMask = nStateMask;
- tvis.item.lParam = lParam;
- HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(this->m_hWnd, TVM_INSERTITEM, 0, (LPARAM)&tvis);
- return CTreeItemT<TBase>(hTreeItem, this);
- }
- CTreeItemT<TBase> HitTest(POINT pt, UINT* pFlags) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- TVHITTESTINFO hti = {};
- hti.pt = pt;
- HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(this->m_hWnd, TVM_HITTEST, 0, (LPARAM)&hti);
- if (pFlags != NULL)
- *pFlags = hti.flags;
- return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
- }
- CTreeItemT<TBase> MapAccIDToHTREEITEM(UINT uID) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(this->m_hWnd, TVM_MAPACCIDTOHTREEITEM, uID, 0L);
- return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
- }
- };
- typedef CTreeViewCtrlExT<ATL::CWindow> CTreeViewCtrlEx;
- // CTreeItem inline methods
- template <class TBase>
- inline BOOL CTreeItemT<TBase>::GetRect(LPRECT lpRect, BOOL bTextOnly) const
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->GetItemRect(m_hTreeItem,lpRect,bTextOnly);
- }
- template <class TBase>
- inline CTreeItemT<TBase> CTreeItemT<TBase>::GetNext(UINT nCode) const
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->GetNextItem(m_hTreeItem,nCode);
- }
- template <class TBase>
- inline CTreeItemT<TBase> CTreeItemT<TBase>::GetChild() const
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->GetChildItem(m_hTreeItem);
- }
- template <class TBase>
- inline CTreeItemT<TBase> CTreeItemT<TBase>::GetNextSibling() const
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->GetNextSiblingItem(m_hTreeItem);
- }
- template <class TBase>
- inline CTreeItemT<TBase> CTreeItemT<TBase>::GetPrevSibling() const
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->GetPrevSiblingItem(m_hTreeItem);
- }
- template <class TBase>
- inline CTreeItemT<TBase> CTreeItemT<TBase>::GetParent() const
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->GetParentItem(m_hTreeItem);
- }
- template <class TBase>
- inline CTreeItemT<TBase> CTreeItemT<TBase>::GetFirstVisible() const
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->GetFirstVisibleItem();
- }
- template <class TBase>
- inline CTreeItemT<TBase> CTreeItemT<TBase>::GetNextVisible() const
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->GetNextVisibleItem(m_hTreeItem);
- }
- template <class TBase>
- inline CTreeItemT<TBase> CTreeItemT<TBase>::GetPrevVisible() const
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->GetPrevVisibleItem(m_hTreeItem);
- }
- template <class TBase>
- inline CTreeItemT<TBase> CTreeItemT<TBase>::GetSelected() const
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->GetSelectedItem();
- }
- template <class TBase>
- inline CTreeItemT<TBase> CTreeItemT<TBase>::GetDropHilight() const
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->GetDropHilightItem();
- }
- template <class TBase>
- inline CTreeItemT<TBase> CTreeItemT<TBase>::GetRoot() const
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->GetRootItem();
- }
- template <class TBase>
- inline CTreeItemT<TBase> CTreeItemT<TBase>::GetLastVisible() const
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->GetLastVisibleItem();
- }
- template <class TBase>
- inline CTreeItemT<TBase> CTreeItemT<TBase>::GetNextSelected() const
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->GetNextSelectedItem(m_hTreeItem);
- }
- template <class TBase>
- inline BOOL CTreeItemT<TBase>::GetText(LPTSTR lpstrText, int nLen) const
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->GetItemText(m_hTreeItem, lpstrText, nLen);
- }
- #ifdef _OLEAUTO_H_
- template <class TBase>
- inline BOOL CTreeItemT<TBase>::GetText(BSTR& bstrText) const
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->GetItemText(m_hTreeItem, bstrText);
- }
- #endif // _OLEAUTO_H_
- #ifdef __ATLSTR_H__
- template <class TBase>
- inline BOOL CTreeItemT<TBase>::GetText(ATL::CString& strText) const
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->GetItemText(m_hTreeItem, strText);
- }
- #endif // __ATLSTR_H__
- template <class TBase>
- inline BOOL CTreeItemT<TBase>::GetImage(int& nImage, int& nSelectedImage) const
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->GetItemImage(m_hTreeItem,nImage,nSelectedImage);
- }
- template <class TBase>
- inline UINT CTreeItemT<TBase>::GetState(UINT nStateMask) const
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->GetItemState(m_hTreeItem,nStateMask);
- }
- template <class TBase>
- inline DWORD_PTR CTreeItemT<TBase>::GetData() const
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->GetItemData(m_hTreeItem);
- }
- template <class TBase>
- inline BOOL CTreeItemT<TBase>::SetItem(UINT nMask, LPCTSTR lpszItem, int nImage,
- int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam)
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->SetItem(m_hTreeItem, nMask, lpszItem, nImage, nSelectedImage, nState, nStateMask, lParam);
- }
- template <class TBase>
- inline BOOL CTreeItemT<TBase>::SetText(LPCTSTR lpszItem)
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->SetItemText(m_hTreeItem,lpszItem);
- }
- template <class TBase>
- inline BOOL CTreeItemT<TBase>::SetImage(int nImage, int nSelectedImage)
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->SetItemImage(m_hTreeItem,nImage,nSelectedImage);
- }
- template <class TBase>
- inline BOOL CTreeItemT<TBase>::SetState(UINT nState, UINT nStateMask)
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->SetItemState(m_hTreeItem,nState,nStateMask);
- }
- template <class TBase>
- inline BOOL CTreeItemT<TBase>::SetData(DWORD_PTR dwData)
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->SetItemData(m_hTreeItem,dwData);
- }
- template <class TBase>
- inline BOOL CTreeItemT<TBase>::HasChildren() const
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->ItemHasChildren(m_hTreeItem);
- }
- template <class TBase>
- inline BOOL CTreeItemT<TBase>::Delete()
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->DeleteItem(m_hTreeItem);
- }
- template <class TBase>
- inline BOOL CTreeItemT<TBase>::Expand(UINT nCode /*= TVE_EXPAND*/)
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->Expand(m_hTreeItem,nCode);
- }
- template <class TBase>
- inline BOOL CTreeItemT<TBase>::Select(UINT nCode)
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->Select(m_hTreeItem,nCode);
- }
- template <class TBase>
- inline BOOL CTreeItemT<TBase>::Select()
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->SelectItem(m_hTreeItem);
- }
- template <class TBase>
- inline BOOL CTreeItemT<TBase>::SelectDropTarget()
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->SelectDropTarget(m_hTreeItem);
- }
- template <class TBase>
- inline BOOL CTreeItemT<TBase>::SelectSetFirstVisible()
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->SelectSetFirstVisible(m_hTreeItem);
- }
- template <class TBase>
- inline HWND CTreeItemT<TBase>::EditLabel()
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->EditLabel(m_hTreeItem);
- }
- template <class TBase>
- inline HIMAGELIST CTreeItemT<TBase>::CreateDragImage()
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->CreateDragImage(m_hTreeItem);
- }
- template <class TBase>
- inline BOOL CTreeItemT<TBase>::SortChildren(BOOL bRecurse /*= FALSE*/)
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->SortChildren(m_hTreeItem, bRecurse);
- }
- template <class TBase>
- inline BOOL CTreeItemT<TBase>::EnsureVisible()
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->EnsureVisible(m_hTreeItem);
- }
- template <class TBase>
- inline CTreeItemT<TBase> CTreeItemT<TBase>::_Insert(LPCTSTR lpstrItem, int nImageIndex, HTREEITEM hItemAfter)
- {
- ATLASSERT(m_pTreeView != NULL);
- TVINSERTSTRUCT ins = {};
- ins.hParent = m_hTreeItem;
- ins.hInsertAfter = hItemAfter;
- ins.item.mask = TVIF_TEXT;
- ins.item.pszText = (LPTSTR)lpstrItem;
- if(nImageIndex != -1)
- {
- ins.item.mask |= TVIF_IMAGE | TVIF_SELECTEDIMAGE;
- ins.item.iImage = nImageIndex;
- ins.item.iSelectedImage = nImageIndex;
- }
- return CTreeItemT<TBase>(m_pTreeView->InsertItem(&ins), m_pTreeView);
- }
- template <class TBase>
- inline int CTreeItemT<TBase>::GetImageIndex() const
- {
- ATLASSERT(m_pTreeView != NULL);
- TVITEM item = {};
- item.mask = TVIF_HANDLE | TVIF_IMAGE;
- item.hItem = m_hTreeItem;
- m_pTreeView->GetItem(&item);
- return item.iImage;
- }
- template <class TBase>
- inline BOOL CTreeItemT<TBase>::SetInsertMark(BOOL bAfter)
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->SetInsertMark(m_hTreeItem, bAfter);
- }
- template <class TBase>
- inline UINT CTreeItemT<TBase>::MapHTREEITEMToAccID() const
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->MapHTREEITEMToAccID(m_hTreeItem);
- }
- #if (_WIN32_WINNT >= 0x0600)
- template <class TBase>
- inline void CTreeItemT<TBase>::ShowInfoTip()
- {
- ATLASSERT(m_pTreeView != NULL);
- m_pTreeView->ShowInfoTip(m_hTreeItem);
- }
- template <class TBase>
- inline BOOL CTreeItemT<TBase>::GetPartRect(TVITEMPART partID, LPRECT lpRect) const
- {
- ATLASSERT(m_pTreeView != NULL);
- return m_pTreeView->GetItemPartRect(m_hTreeItem, partID, lpRect);
- }
- #endif // (_WIN32_WINNT >= 0x0600)
- ///////////////////////////////////////////////////////////////////////////////
- // CToolBarCtrl
- template <class TBase>
- class CToolBarCtrlT : public TBase
- {
- public:
- // Construction
- CToolBarCtrlT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CToolBarCtrlT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Attributes
- static LPCTSTR GetWndClassName()
- {
- return TOOLBARCLASSNAME;
- }
- BOOL IsButtonEnabled(int nID) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_ISBUTTONENABLED, nID, 0L);
- }
- BOOL IsButtonChecked(int nID) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_ISBUTTONCHECKED, nID, 0L);
- }
- BOOL IsButtonPressed(int nID) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_ISBUTTONPRESSED, nID, 0L);
- }
- BOOL IsButtonHidden(int nID) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return(BOOL) ::SendMessage(this->m_hWnd, TB_ISBUTTONHIDDEN, nID, 0L);
- }
- BOOL IsButtonIndeterminate(int nID) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_ISBUTTONINDETERMINATE, nID, 0L);
- }
- int GetState(int nID) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TB_GETSTATE, nID, 0L);
- }
- BOOL SetState(int nID, UINT nState)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_SETSTATE, nID, MAKELPARAM(nState, 0));
- }
- BOOL GetButton(int nIndex, LPTBBUTTON lpButton) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_GETBUTTON, nIndex, (LPARAM)lpButton);
- }
- int GetButtonCount() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TB_BUTTONCOUNT, 0, 0L);
- }
- BOOL GetItemRect(int nIndex, LPRECT lpRect) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_GETITEMRECT, nIndex, (LPARAM)lpRect);
- }
- void SetButtonStructSize(int nSize = sizeof(TBBUTTON))
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TB_BUTTONSTRUCTSIZE, nSize, 0L);
- }
- BOOL SetButtonSize(SIZE size)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_SETBUTTONSIZE, 0, MAKELPARAM(size.cx, size.cy));
- }
- BOOL SetButtonSize(int cx, int cy)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_SETBUTTONSIZE, 0, MAKELPARAM(cx, cy));
- }
- BOOL SetBitmapSize(SIZE size)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_SETBITMAPSIZE, 0, MAKELPARAM(size.cx, size.cy));
- }
- BOOL SetBitmapSize(int cx, int cy)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_SETBITMAPSIZE, 0, MAKELPARAM(cx, cy));
- }
- CToolTipCtrl GetToolTips() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CToolTipCtrl((HWND)::SendMessage(this->m_hWnd, TB_GETTOOLTIPS, 0, 0L));
- }
- void SetToolTips(HWND hWndToolTip)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TB_SETTOOLTIPS, (WPARAM)hWndToolTip, 0L);
- }
- void SetNotifyWnd(HWND hWnd)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TB_SETPARENT, (WPARAM)hWnd, 0L);
- }
- int GetRows() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TB_GETROWS, 0, 0L);
- }
- void SetRows(int nRows, BOOL bLarger, LPRECT lpRect)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TB_SETROWS, MAKELPARAM(nRows, bLarger), (LPARAM)lpRect);
- }
- BOOL SetCmdID(int nIndex, UINT nID)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_SETCMDID, nIndex, nID);
- }
- DWORD GetBitmapFlags() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, TB_GETBITMAPFLAGS, 0, 0L);
- }
- int GetBitmap(int nID) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TB_GETBITMAP, nID, 0L);
- }
- int GetButtonText(int nID, LPTSTR lpstrText) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TB_GETBUTTONTEXT, nID, (LPARAM)lpstrText);
- }
- // nIndex - IE5 or higher only
- CImageList GetImageList(int nIndex = 0) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CImageList((HIMAGELIST)::SendMessage(this->m_hWnd, TB_GETIMAGELIST, nIndex, 0L));
- }
- // nIndex - IE5 or higher only
- CImageList SetImageList(HIMAGELIST hImageList, int nIndex = 0)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CImageList((HIMAGELIST)::SendMessage(this->m_hWnd, TB_SETIMAGELIST, nIndex, (LPARAM)hImageList));
- }
- // nIndex - IE5 or higher only
- CImageList GetDisabledImageList(int nIndex = 0) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CImageList((HIMAGELIST)::SendMessage(this->m_hWnd, TB_GETDISABLEDIMAGELIST, nIndex, 0L));
- }
- // nIndex - IE5 or higher only
- CImageList SetDisabledImageList(HIMAGELIST hImageList, int nIndex = 0)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CImageList((HIMAGELIST)::SendMessage(this->m_hWnd, TB_SETDISABLEDIMAGELIST, nIndex, (LPARAM)hImageList));
- }
- // nIndex - IE5 or higher only
- CImageList GetHotImageList(int nIndex = 0) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CImageList((HIMAGELIST)::SendMessage(this->m_hWnd, TB_GETHOTIMAGELIST, nIndex, 0L));
- }
- // nIndex - IE5 or higher only
- CImageList SetHotImageList(HIMAGELIST hImageList, int nIndex = 0)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CImageList((HIMAGELIST)::SendMessage(this->m_hWnd, TB_SETHOTIMAGELIST, nIndex, (LPARAM)hImageList));
- }
- DWORD GetStyle() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, TB_GETSTYLE, 0, 0L);
- }
- void SetStyle(DWORD dwStyle)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TB_SETSTYLE, 0, dwStyle);
- }
- DWORD GetButtonSize() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, TB_GETBUTTONSIZE, 0, 0L);
- }
- void GetButtonSize(SIZE& size) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- DWORD dwRet = (DWORD)::SendMessage(this->m_hWnd, TB_GETBUTTONSIZE, 0, 0L);
- size.cx = LOWORD(dwRet);
- size.cy = HIWORD(dwRet);
- }
- BOOL GetRect(int nID, LPRECT lpRect) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_GETRECT, nID, (LPARAM)lpRect);
- }
- int GetTextRows() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TB_GETTEXTROWS, 0, 0L);
- }
- BOOL SetButtonWidth(int cxMin, int cxMax)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_SETBUTTONWIDTH, 0, MAKELPARAM(cxMin, cxMax));
- }
- BOOL SetIndent(int nIndent)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_SETINDENT, nIndent, 0L);
- }
- BOOL SetMaxTextRows(int nMaxTextRows)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_SETMAXTEXTROWS, nMaxTextRows, 0L);
- }
- BOOL GetAnchorHighlight() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_GETANCHORHIGHLIGHT, 0, 0L);
- }
- BOOL SetAnchorHighlight(BOOL bEnable = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_SETANCHORHIGHLIGHT, bEnable, 0L);
- }
- int GetButtonInfo(int nID, LPTBBUTTONINFO lptbbi) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TB_GETBUTTONINFO, nID, (LPARAM)lptbbi);
- }
- BOOL SetButtonInfo(int nID, LPTBBUTTONINFO lptbbi)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_SETBUTTONINFO, nID, (LPARAM)lptbbi);
- }
- BOOL SetButtonInfo(int nID, DWORD dwMask, BYTE Style, BYTE State, LPCTSTR lpszItem,
- int iImage, WORD cx, int iCommand, DWORD_PTR lParam)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- TBBUTTONINFO tbbi = {};
- tbbi.cbSize = sizeof(TBBUTTONINFO);
- tbbi.dwMask = dwMask;
- tbbi.idCommand = iCommand;
- tbbi.iImage = iImage;
- tbbi.fsState = State;
- tbbi.fsStyle = Style;
- tbbi.cx = cx;
- tbbi.pszText = (LPTSTR) lpszItem;
- tbbi.lParam = lParam;
- return (BOOL)::SendMessage(this->m_hWnd, TB_SETBUTTONINFO, nID, (LPARAM)&tbbi);
- }
- int GetHotItem() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TB_GETHOTITEM, 0, 0L);
- }
- int SetHotItem(int nItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TB_SETHOTITEM, nItem, 0L);
- }
- BOOL IsButtonHighlighted(int nButtonID) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_ISBUTTONHIGHLIGHTED, nButtonID, 0L);
- }
- DWORD SetDrawTextFlags(DWORD dwMask, DWORD dwFlags)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, TB_SETDRAWTEXTFLAGS, dwMask, dwFlags);
- }
- BOOL GetColorScheme(LPCOLORSCHEME lpcs) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_GETCOLORSCHEME, 0, (LPARAM)lpcs);
- }
- void SetColorScheme(LPCOLORSCHEME lpcs)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TB_SETCOLORSCHEME, 0, (LPARAM)lpcs);
- }
- DWORD GetExtendedStyle() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, TB_GETEXTENDEDSTYLE, 0, 0L);
- }
- DWORD SetExtendedStyle(DWORD dwStyle)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, TB_SETEXTENDEDSTYLE, 0, dwStyle);
- }
- void GetInsertMark(LPTBINSERTMARK lptbim) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TB_GETINSERTMARK, 0, (LPARAM)lptbim);
- }
- void SetInsertMark(LPTBINSERTMARK lptbim)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TB_SETINSERTMARK, 0, (LPARAM)lptbim);
- }
- COLORREF GetInsertMarkColor() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, TB_GETINSERTMARKCOLOR, 0, 0L);
- }
- COLORREF SetInsertMarkColor(COLORREF clr)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, TB_SETINSERTMARKCOLOR, 0, (LPARAM)clr);
- }
- BOOL GetMaxSize(LPSIZE lpSize) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_GETMAXSIZE, 0, (LPARAM)lpSize);
- }
- void GetPadding(LPSIZE lpSizePadding) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(lpSizePadding != NULL);
- DWORD dwRet = (DWORD)::SendMessage(this->m_hWnd, TB_GETPADDING, 0, 0L);
- lpSizePadding->cx = GET_X_LPARAM(dwRet);
- lpSizePadding->cy = GET_Y_LPARAM(dwRet);
- }
- void SetPadding(int cx, int cy, LPSIZE lpSizePadding = NULL)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- DWORD dwRet = (DWORD)::SendMessage(this->m_hWnd, TB_SETPADDING, 0, MAKELPARAM(cx, cy));
- if(lpSizePadding != NULL)
- {
- lpSizePadding->cx = GET_X_LPARAM(dwRet);
- lpSizePadding->cy = GET_Y_LPARAM(dwRet);
- }
- }
- BOOL GetUnicodeFormat() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_GETUNICODEFORMAT, 0, 0L);
- }
- BOOL SetUnicodeFormat(BOOL bUnicode = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_SETUNICODEFORMAT, bUnicode, 0L);
- }
- int GetString(int nString, LPTSTR lpstrString, int cchMaxLen) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TB_GETSTRING, MAKEWPARAM(cchMaxLen, nString), (LPARAM)lpstrString);
- }
- int GetStringBSTR(int nString, BSTR& bstrString) const
- {
- USES_CONVERSION;
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(bstrString == NULL);
- int nLength = (int)(short)LOWORD(::SendMessage(this->m_hWnd, TB_GETSTRING, MAKEWPARAM(0, nString), NULL));
- if(nLength != -1)
- {
- ATL::CTempBuffer<TCHAR, _WTL_STACK_ALLOC_THRESHOLD> buff;
- LPTSTR lpstrText = buff.Allocate(nLength + 1);
- if(lpstrText != NULL)
- {
- nLength = (int)::SendMessage(this->m_hWnd, TB_GETSTRING, MAKEWPARAM(nLength + 1, nString), (LPARAM)lpstrText);
- if(nLength != -1)
- bstrString = ::SysAllocString(T2OLE(lpstrText));
- }
- else
- {
- nLength = -1;
- }
- }
- return nLength;
- }
- #ifdef __ATLSTR_H__
- int GetString(int nString, ATL::CString& str) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- int nLength = (int)(short)LOWORD(::SendMessage(this->m_hWnd, TB_GETSTRING, MAKEWPARAM(0, nString), NULL));
- if(nLength != -1)
- {
- LPTSTR lpstr = str.GetBufferSetLength(nLength + 1);
- if(lpstr != NULL)
- nLength = (int)::SendMessage(this->m_hWnd, TB_GETSTRING, MAKEWPARAM(nLength + 1, nString), (LPARAM)lpstr);
- else
- nLength = -1;
- str.ReleaseBuffer();
- }
- return nLength;
- }
- #endif // __ATLSTR_H__
- void GetMetrics(LPTBMETRICS lptbm) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TB_GETMETRICS, 0, (LPARAM)lptbm);
- }
- void SetMetrics(LPTBMETRICS lptbm)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TB_SETMETRICS, 0, (LPARAM)lptbm);
- }
- void SetWindowTheme(LPCWSTR lpstrTheme)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TB_SETWINDOWTHEME, 0, (LPARAM)lpstrTheme);
- }
- #if (_WIN32_WINNT >= 0x0600)
- CImageList GetPressedImageList(int nIndex = 0) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CImageList((HIMAGELIST)::SendMessage(this->m_hWnd, TB_GETPRESSEDIMAGELIST, nIndex, 0L));
- }
- CImageList SetPressedImageList(HIMAGELIST hImageList, int nIndex = 0)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CImageList((HIMAGELIST)::SendMessage(this->m_hWnd, TB_SETPRESSEDIMAGELIST, nIndex, (LPARAM)hImageList));
- }
- void GetItemDropDownRect(int nIndex, LPRECT lpRect) const
- {
- #ifndef TB_GETITEMDROPDOWNRECT
- const int TB_GETITEMDROPDOWNRECT = WM_USER + 103;
- #endif
- ATLASSERT(::IsWindow(this->m_hWnd));
- BOOL bRet = (BOOL)::SendMessage(this->m_hWnd, TB_GETITEMDROPDOWNRECT, nIndex, (LPARAM)lpRect);
- (void)bRet; // avoid level 4 warning
- ATLASSERT(bRet != FALSE);
- }
- #endif // (_WIN32_WINNT >= 0x0600)
- // Operations
- BOOL EnableButton(int nID, BOOL bEnable = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_ENABLEBUTTON, nID, MAKELPARAM(bEnable, 0));
- }
- BOOL CheckButton(int nID, BOOL bCheck = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_CHECKBUTTON, nID, MAKELPARAM(bCheck, 0));
- }
- BOOL PressButton(int nID, BOOL bPress = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_PRESSBUTTON, nID, MAKELPARAM(bPress, 0));
- }
- BOOL HideButton(int nID, BOOL bHide = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_HIDEBUTTON, nID, MAKELPARAM(bHide, 0));
- }
- BOOL Indeterminate(int nID, BOOL bIndeterminate = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_INDETERMINATE, nID, MAKELPARAM(bIndeterminate, 0));
- }
- int AddBitmap(int nNumButtons, UINT nBitmapID)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- TBADDBITMAP tbab = {};
- tbab.hInst = ModuleHelper::GetResourceInstance();
- ATLASSERT(tbab.hInst != NULL);
- tbab.nID = nBitmapID;
- return (int)::SendMessage(this->m_hWnd, TB_ADDBITMAP, (WPARAM)nNumButtons, (LPARAM)&tbab);
- }
- int AddBitmap(int nNumButtons, HBITMAP hBitmap)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- TBADDBITMAP tbab = {};
- tbab.hInst = NULL;
- tbab.nID = (UINT_PTR)hBitmap;
- return (int)::SendMessage(this->m_hWnd, TB_ADDBITMAP, (WPARAM)nNumButtons, (LPARAM)&tbab);
- }
- BOOL AddButtons(int nNumButtons, LPCTBBUTTON lpButtons)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_ADDBUTTONS, nNumButtons, (LPARAM)lpButtons);
- }
- BOOL InsertButton(int nIndex, LPCTBBUTTON lpButton)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_INSERTBUTTON, nIndex, (LPARAM)lpButton);
- }
- BOOL InsertButton(int nIndex, int iCommand, BYTE Style, BYTE State, int iBitmap,
- INT_PTR iString, DWORD_PTR lParam)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- TBBUTTON tbb = {};
- tbb.fsStyle = Style;
- tbb.fsState = State;
- tbb.idCommand = iCommand;
- tbb.iBitmap = iBitmap;
- tbb.iString = iString;
- tbb.dwData = lParam;
- return (BOOL)::SendMessage(this->m_hWnd, TB_INSERTBUTTON, nIndex, (LPARAM)&tbb);
- }
- BOOL InsertButton(int nIndex, int iCommand, BYTE Style, BYTE State, int iBitmap,
- LPCTSTR lpszItem, DWORD_PTR lParam)
- {
- return InsertButton(nIndex, iCommand, Style, State, iBitmap, (INT_PTR)lpszItem, lParam);
- }
- BOOL AddButton(LPTBBUTTON lpButton)
- {
- return InsertButton(-1, lpButton);
- }
- BOOL AddButton(int iCommand, BYTE Style, BYTE State, int iBitmap, INT_PTR iString, DWORD_PTR lParam)
- {
- return InsertButton(-1, iCommand, Style, State, iBitmap, iString, lParam);
- }
- BOOL AddButton(int iCommand, BYTE Style, BYTE State, int iBitmap, LPCTSTR lpszItem, DWORD_PTR lParam)
- {
- return InsertButton(-1, iCommand, Style, State, iBitmap, lpszItem, lParam);
- }
- BOOL DeleteButton(int nIndex)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_DELETEBUTTON, nIndex, 0L);
- }
- BOOL InsertSeparator(int nIndex, int cxWidth = 8)
- {
- return InsertButton(nIndex, 0, BTNS_SEP, 0, cxWidth, (INT_PTR)0, 0);
- }
- BOOL AddSeparator(int cxWidth = 8)
- {
- return AddButton(0, BTNS_SEP, 0, cxWidth, (INT_PTR)0, 0);
- }
- int CommandToIndex(UINT nID) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TB_COMMANDTOINDEX, nID, 0L);
- }
- void SaveState(HKEY hKeyRoot, LPCTSTR lpszSubKey, LPCTSTR lpszValueName)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- TBSAVEPARAMS tbs = {};
- tbs.hkr = hKeyRoot;
- tbs.pszSubKey = lpszSubKey;
- tbs.pszValueName = lpszValueName;
- ::SendMessage(this->m_hWnd, TB_SAVERESTORE, (WPARAM)TRUE, (LPARAM)&tbs);
- }
- void RestoreState(HKEY hKeyRoot, LPCTSTR lpszSubKey, LPCTSTR lpszValueName)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- TBSAVEPARAMS tbs = {};
- tbs.hkr = hKeyRoot;
- tbs.pszSubKey = lpszSubKey;
- tbs.pszValueName = lpszValueName;
- ::SendMessage(this->m_hWnd, TB_SAVERESTORE, (WPARAM)FALSE, (LPARAM)&tbs);
- }
- void Customize()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TB_CUSTOMIZE, 0, 0L);
- }
- int AddString(UINT nStringID)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TB_ADDSTRING, (WPARAM)ModuleHelper::GetResourceInstance(), (LPARAM)nStringID);
- }
- int AddStrings(LPCTSTR lpszStrings)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TB_ADDSTRING, 0, (LPARAM)lpszStrings);
- }
- void AutoSize()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TB_AUTOSIZE, 0, 0L);
- }
- BOOL ChangeBitmap(int nID, int nBitmap)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_CHANGEBITMAP, nID, MAKELPARAM(nBitmap, 0));
- }
- int LoadImages(int nBitmapID)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TB_LOADIMAGES, nBitmapID, (LPARAM)ModuleHelper::GetResourceInstance());
- }
- int LoadStdImages(int nBitmapID)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TB_LOADIMAGES, nBitmapID, (LPARAM)HINST_COMMCTRL);
- }
- BOOL ReplaceBitmap(LPTBREPLACEBITMAP ptbrb)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_REPLACEBITMAP, 0, (LPARAM)ptbrb);
- }
- int HitTest(LPPOINT lpPoint) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TB_HITTEST, 0, (LPARAM)lpPoint);
- }
- BOOL InsertMarkHitTest(LPPOINT lpPoint, LPTBINSERTMARK lptbim) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_INSERTMARKHITTEST, (WPARAM)lpPoint, (LPARAM)lptbim);
- }
- BOOL InsertMarkHitTest(int x, int y, LPTBINSERTMARK lptbim) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- POINT pt = { x, y };
- return (BOOL)::SendMessage(this->m_hWnd, TB_INSERTMARKHITTEST, (WPARAM)&pt, (LPARAM)lptbim);
- }
- BOOL MapAccelerator(TCHAR chAccel, int& nID) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_MAPACCELERATOR, (WPARAM)chAccel, (LPARAM)&nID);
- }
- BOOL MarkButton(int nID, BOOL bHighlight = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_MARKBUTTON, nID, MAKELPARAM(bHighlight, 0));
- }
- BOOL MoveButton(int nOldPos, int nNewPos)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TB_MOVEBUTTON, nOldPos, nNewPos);
- }
- HRESULT GetObject(REFIID iid, LPVOID* ppvObject)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HRESULT)::SendMessage(this->m_hWnd, TB_GETOBJECT, (WPARAM)&iid, (LPARAM)ppvObject);
- }
- };
- typedef CToolBarCtrlT<ATL::CWindow> CToolBarCtrl;
- ///////////////////////////////////////////////////////////////////////////////
- // CStatusBarCtrl
- template <class TBase>
- class CStatusBarCtrlT : public TBase
- {
- public:
- // Constructors
- CStatusBarCtrlT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CStatusBarCtrlT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Methods
- static LPCTSTR GetWndClassName()
- {
- return STATUSCLASSNAME;
- }
- int GetParts(int nParts, int* pParts) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, SB_GETPARTS, nParts, (LPARAM)pParts);
- }
- BOOL SetParts(int nParts, int* pWidths)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, SB_SETPARTS, nParts, (LPARAM)pWidths);
- }
- int GetTextLength(int nPane, int* pType = NULL) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(nPane < 256);
- DWORD dwRet = (DWORD)::SendMessage(this->m_hWnd, SB_GETTEXTLENGTH, (WPARAM)nPane, 0L);
- if (pType != NULL)
- *pType = (int)(short)HIWORD(dwRet);
- return (int)(short)LOWORD(dwRet);
- }
- int GetText(int nPane, LPTSTR lpszText, int* pType = NULL) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(nPane < 256);
- DWORD dwRet = (DWORD)::SendMessage(this->m_hWnd, SB_GETTEXT, (WPARAM)nPane, (LPARAM)lpszText);
- if(pType != NULL)
- *pType = (int)(short)HIWORD(dwRet);
- return (int)(short)LOWORD(dwRet);
- }
- BOOL GetTextBSTR(int nPane, BSTR& bstrText, int* pType = NULL) const
- {
- USES_CONVERSION;
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(nPane < 256);
- ATLASSERT(bstrText == NULL);
- int nLength = (int)(short)LOWORD(::SendMessage(this->m_hWnd, SB_GETTEXTLENGTH, (WPARAM)nPane, 0L));
- if(nLength == 0)
- return FALSE;
- ATL::CTempBuffer<TCHAR, _WTL_STACK_ALLOC_THRESHOLD> buff;
- LPTSTR lpstrText = buff.Allocate(nLength + 1);
- if(lpstrText == NULL)
- return FALSE;
- if(!GetText(nPane, lpstrText, pType))
- return FALSE;
- bstrText = ::SysAllocString(T2OLE(lpstrText));
- return (bstrText != NULL) ? TRUE : FALSE;
- }
- #ifdef __ATLSTR_H__
- int GetText(int nPane, ATL::CString& strText, int* pType = NULL) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(nPane < 256);
- int nLength = (int)(short)LOWORD(::SendMessage(this->m_hWnd, SB_GETTEXTLENGTH, (WPARAM)nPane, 0L));
- if(nLength == 0)
- return 0;
- LPTSTR lpstr = strText.GetBufferSetLength(nLength);
- if(lpstr == NULL)
- return 0;
- return GetText(nPane, lpstr, pType);
- }
- #endif // __ATLSTR_H__
- BOOL SetText(int nPane, LPCTSTR lpszText, int nType = 0)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(nPane < 256);
- return (BOOL)::SendMessage(this->m_hWnd, SB_SETTEXT, (nPane | nType), (LPARAM)lpszText);
- }
- BOOL GetRect(int nPane, LPRECT lpRect) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(nPane < 256);
- return (BOOL)::SendMessage(this->m_hWnd, SB_GETRECT, nPane, (LPARAM)lpRect);
- }
- BOOL GetBorders(int* pBorders) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, SB_GETBORDERS, 0, (LPARAM)pBorders);
- }
- BOOL GetBorders(int& nHorz, int& nVert, int& nSpacing) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- int borders[3] = {};
- BOOL bResult = (BOOL)::SendMessage(this->m_hWnd, SB_GETBORDERS, 0, (LPARAM)&borders);
- if(bResult)
- {
- nHorz = borders[0];
- nVert = borders[1];
- nSpacing = borders[2];
- }
- return bResult;
- }
- void SetMinHeight(int nMin)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, SB_SETMINHEIGHT, nMin, 0L);
- }
- BOOL SetSimple(BOOL bSimple = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, SB_SIMPLE, bSimple, 0L);
- }
- BOOL IsSimple() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, SB_ISSIMPLE, 0, 0L);
- }
- BOOL GetUnicodeFormat() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, SB_GETUNICODEFORMAT, 0, 0L);
- }
- BOOL SetUnicodeFormat(BOOL bUnicode = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, SB_SETUNICODEFORMAT, bUnicode, 0L);
- }
- void GetTipText(int nPane, LPTSTR lpstrText, int nSize) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(nPane < 256);
- ::SendMessage(this->m_hWnd, SB_GETTIPTEXT, MAKEWPARAM(nPane, nSize), (LPARAM)lpstrText);
- }
- void SetTipText(int nPane, LPCTSTR lpstrText)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(nPane < 256);
- ::SendMessage(this->m_hWnd, SB_SETTIPTEXT, nPane, (LPARAM)lpstrText);
- }
- COLORREF SetBkColor(COLORREF clrBk)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, SB_SETBKCOLOR, 0, (LPARAM)clrBk);
- }
- HICON GetIcon(int nPane) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(nPane < 256);
- return (HICON)::SendMessage(this->m_hWnd, SB_GETICON, nPane, 0L);
- }
- BOOL SetIcon(int nPane, HICON hIcon)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(nPane < 256);
- return (BOOL)::SendMessage(this->m_hWnd, SB_SETICON, nPane, (LPARAM)hIcon);
- }
- };
- typedef CStatusBarCtrlT<ATL::CWindow> CStatusBarCtrl;
- ///////////////////////////////////////////////////////////////////////////////
- // CTabCtrl
- template <class TBase>
- class CTabCtrlT : public TBase
- {
- public:
- // Constructors
- CTabCtrlT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CTabCtrlT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Attributes
- static LPCTSTR GetWndClassName()
- {
- return WC_TABCONTROL;
- }
- CImageList GetImageList() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CImageList((HIMAGELIST)::SendMessage(this->m_hWnd, TCM_GETIMAGELIST, 0, 0L));
- }
- CImageList SetImageList(HIMAGELIST hImageList)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CImageList((HIMAGELIST)::SendMessage(this->m_hWnd, TCM_SETIMAGELIST, 0, (LPARAM)hImageList));
- }
- int GetItemCount() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TCM_GETITEMCOUNT, 0, 0L);
- }
- BOOL GetItem(int nItem, LPTCITEM pTabCtrlItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TCM_GETITEM, nItem, (LPARAM)pTabCtrlItem);
- }
- BOOL SetItem(int nItem, LPTCITEM pTabCtrlItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TCM_SETITEM, nItem, (LPARAM)pTabCtrlItem);
- }
- int SetItem(int nItem, UINT mask, LPCTSTR lpszItem, DWORD dwState, DWORD dwStateMask, int iImage, LPARAM lParam)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- TCITEM tci = {};
- tci.mask = mask;
- tci.pszText = (LPTSTR) lpszItem;
- tci.dwState = dwState;
- tci.dwStateMask = dwStateMask;
- tci.iImage = iImage;
- tci.lParam = lParam;
- return (int)::SendMessage(this->m_hWnd, TCM_SETITEM, nItem, (LPARAM)&tci);
- }
- BOOL GetItemRect(int nItem, LPRECT lpRect) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TCM_GETITEMRECT, nItem, (LPARAM)lpRect);
- }
- int GetCurSel() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TCM_GETCURSEL, 0, 0L);
- }
- int SetCurSel(int nItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TCM_SETCURSEL, nItem, 0L);
- }
- SIZE SetItemSize(SIZE size)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- DWORD dwSize = (DWORD)::SendMessage(this->m_hWnd, TCM_SETITEMSIZE, 0, MAKELPARAM(size.cx, size.cy));
- SIZE sizeRet = { GET_X_LPARAM(dwSize), GET_Y_LPARAM(dwSize) };
- return sizeRet;
- }
- void SetItemSize(int cx, int cy)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TCM_SETITEMSIZE, 0, MAKELPARAM(cx, cy));
- }
- void SetPadding(SIZE size)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TCM_SETPADDING, 0, MAKELPARAM(size.cx, size.cy));
- }
- int GetRowCount() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TCM_GETROWCOUNT, 0, 0L);
- }
- CToolTipCtrl GetToolTips() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CToolTipCtrl((HWND)::SendMessage(this->m_hWnd, TCM_GETTOOLTIPS, 0, 0L));
- }
- // this method is deprecated, please use GetToolTips
- CToolTipCtrl GetTooltips() const { return GetToolTips(); }
- void SetToolTips(HWND hWndToolTip)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TCM_SETTOOLTIPS, (WPARAM)hWndToolTip, 0L);
- }
- // this method is deprecated, please use SetToolTips
- void SetTooltips(HWND hWndToolTip) { SetToolTips(hWndToolTip); }
- int GetCurFocus() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TCM_GETCURFOCUS, 0, 0L);
- }
- void SetCurFocus(int nItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TCM_SETCURFOCUS, nItem, 0L);
- }
- BOOL SetItemExtra(int cbExtra)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(GetItemCount() == 0); // must be empty
- return (BOOL)::SendMessage(this->m_hWnd, TCM_SETITEMEXTRA, cbExtra, 0L);
- }
- int SetMinTabWidth(int nWidth = -1)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TCM_SETMINTABWIDTH, 0, nWidth);
- }
- DWORD GetExtendedStyle() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, TCM_GETEXTENDEDSTYLE, 0, 0L);
- }
- DWORD SetExtendedStyle(DWORD dwExMask, DWORD dwExStyle)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, TCM_SETEXTENDEDSTYLE, dwExMask, dwExStyle);
- }
- BOOL GetUnicodeFormat() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TCM_GETUNICODEFORMAT, 0, 0L);
- }
- BOOL SetUnicodeFormat(BOOL bUnicode = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TCM_SETUNICODEFORMAT, bUnicode, 0L);
- }
- // Operations
- int InsertItem(int nItem, LPTCITEM pTabCtrlItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TCM_INSERTITEM, nItem, (LPARAM)pTabCtrlItem);
- }
- int InsertItem(int nItem, UINT mask, LPCTSTR lpszItem, int iImage, LPARAM lParam)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- TCITEM tci = {};
- tci.mask = mask;
- tci.pszText = (LPTSTR) lpszItem;
- tci.iImage = iImage;
- tci.lParam = lParam;
- return (int)::SendMessage(this->m_hWnd, TCM_INSERTITEM, nItem, (LPARAM)&tci);
- }
- int InsertItem(int nItem, LPCTSTR lpszItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- TCITEM tci = {};
- tci.mask = TCIF_TEXT;
- tci.pszText = (LPTSTR) lpszItem;
- return (int)::SendMessage(this->m_hWnd, TCM_INSERTITEM, nItem, (LPARAM)&tci);
- }
- int AddItem(LPTCITEM pTabCtrlItem)
- {
- return InsertItem(GetItemCount(), pTabCtrlItem);
- }
- int AddItem(UINT mask, LPCTSTR lpszItem, int iImage, LPARAM lParam)
- {
- return InsertItem(GetItemCount(), mask, lpszItem, iImage, lParam);
- }
- int AddItem(LPCTSTR lpszItem)
- {
- return InsertItem(GetItemCount(), lpszItem);
- }
- BOOL DeleteItem(int nItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TCM_DELETEITEM, nItem, 0L);
- }
- BOOL DeleteAllItems()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TCM_DELETEALLITEMS, 0, 0L);
- }
- void AdjustRect(BOOL bLarger, LPRECT lpRect)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TCM_ADJUSTRECT, bLarger, (LPARAM)lpRect);
- }
- void RemoveImage(int nImage)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TCM_REMOVEIMAGE, nImage, 0L);
- }
- int HitTest(TC_HITTESTINFO* pHitTestInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TCM_HITTEST, 0, (LPARAM)pHitTestInfo);
- }
- void DeselectAll(BOOL bExcludeFocus = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TCM_DESELECTALL, bExcludeFocus, 0L);
- }
- BOOL HighlightItem(int nIndex, BOOL bHighlight = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TCM_HIGHLIGHTITEM, nIndex, MAKELPARAM(bHighlight, 0));
- }
- };
- typedef CTabCtrlT<ATL::CWindow> CTabCtrl;
- ///////////////////////////////////////////////////////////////////////////////
- // CTrackBarCtrl
- template <class TBase>
- class CTrackBarCtrlT : public TBase
- {
- public:
- // Constructors
- CTrackBarCtrlT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CTrackBarCtrlT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Attributes
- static LPCTSTR GetWndClassName()
- {
- return TRACKBAR_CLASS;
- }
- int GetLineSize() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TBM_GETLINESIZE, 0, 0L);
- }
- int SetLineSize(int nSize)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TBM_SETLINESIZE, 0, nSize);
- }
- int GetPageSize() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TBM_GETPAGESIZE, 0, 0L);
- }
- int SetPageSize(int nSize)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TBM_SETPAGESIZE, 0, nSize);
- }
- int GetRangeMin() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TBM_GETRANGEMIN, 0, 0L);
- }
- void SetRangeMin(int nMin, BOOL bRedraw = FALSE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TBM_SETRANGEMIN, bRedraw, nMin);
- }
- int GetRangeMax() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TBM_GETRANGEMAX, 0, 0L);
- }
- void SetRangeMax(int nMax, BOOL bRedraw = FALSE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TBM_SETRANGEMAX, bRedraw, nMax);
- }
- void GetRange(int& nMin, int& nMax) const
- {
- nMin = GetRangeMin();
- nMax = GetRangeMax();
- }
- void SetRange(int nMin, int nMax, BOOL bRedraw = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TBM_SETRANGE, bRedraw, MAKELPARAM(nMin, nMax));
- }
- int GetSelStart() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TBM_GETSELSTART, 0, 0L);
- }
- void SetSelStart(int nMin, BOOL bRedraw = FALSE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TBM_SETSELSTART, bRedraw, (LPARAM)nMin);
- }
- int GetSelEnd() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TBM_GETSELEND, 0, 0L);
- }
- void SetSelEnd(int nMax, BOOL bRedraw = FALSE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TBM_SETSELEND, bRedraw, (LPARAM)nMax);
- }
- void GetSelection(int& nMin, int& nMax) const
- {
- nMin = GetSelStart();
- nMax = GetSelEnd();
- }
- void SetSelection(int nMin, int nMax, BOOL bRedraw = TRUE)
- {
- SetSelStart(nMin, FALSE);
- SetSelEnd(nMax, bRedraw);
- }
- void GetChannelRect(LPRECT lprc) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TBM_GETCHANNELRECT, 0, (LPARAM)lprc);
- }
- void GetThumbRect(LPRECT lprc) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TBM_GETTHUMBRECT, 0, (LPARAM)lprc);
- }
- int GetPos() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TBM_GETPOS, 0, 0L);
- }
- void SetPos(int nPos)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TBM_SETPOS, TRUE, nPos);
- }
- UINT GetNumTics() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UINT)::SendMessage(this->m_hWnd, TBM_GETNUMTICS, 0, 0L);
- }
- DWORD* GetTicArray() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD*)::SendMessage(this->m_hWnd, TBM_GETPTICS, 0, 0L);
- }
- int GetTic(int nTic) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TBM_GETTIC, nTic, 0L);
- }
- BOOL SetTic(int nTic)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TBM_SETTIC, 0, nTic);
- }
- int GetTicPos(int nTic) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TBM_GETTICPOS, nTic, 0L);
- }
- void SetTicFreq(int nFreq)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TBM_SETTICFREQ, nFreq, 0L);
- }
- int GetThumbLength() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TBM_GETTHUMBLENGTH, 0, 0L);
- }
- void SetThumbLength(int nLength)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TBM_SETTHUMBLENGTH, nLength, 0L);
- }
- void SetSel(int nStart, int nEnd, BOOL bRedraw = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & TBS_ENABLESELRANGE) != 0);
- ::SendMessage(this->m_hWnd, TBM_SETSEL, bRedraw, MAKELPARAM(nStart, nEnd));
- }
- ATL::CWindow GetBuddy(BOOL bLeft = TRUE) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return ATL::CWindow((HWND)::SendMessage(this->m_hWnd, TBM_GETBUDDY, bLeft, 0L));
- }
- ATL::CWindow SetBuddy(HWND hWndBuddy, BOOL bLeft = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return ATL::CWindow((HWND)::SendMessage(this->m_hWnd, TBM_SETBUDDY, bLeft, (LPARAM)hWndBuddy));
- }
- CToolTipCtrl GetToolTips() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CToolTipCtrl((HWND)::SendMessage(this->m_hWnd, TBM_GETTOOLTIPS, 0, 0L));
- }
- void SetToolTips(HWND hWndTT)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TBM_SETTOOLTIPS, (WPARAM)hWndTT, 0L);
- }
- int SetTipSide(int nSide)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, TBM_SETTIPSIDE, nSide, 0L);
- }
- BOOL GetUnicodeFormat() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TBM_GETUNICODEFORMAT, 0, 0L);
- }
- BOOL SetUnicodeFormat(BOOL bUnicode = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, TBM_SETUNICODEFORMAT, bUnicode, 0L);
- }
- // Operations
- void ClearSel(BOOL bRedraw = FALSE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TBM_CLEARSEL, bRedraw, 0L);
- }
- void VerifyPos()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TBM_SETPOS, FALSE, 0L);
- }
- void ClearTics(BOOL bRedraw = FALSE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, TBM_CLEARTICS, bRedraw, 0L);
- }
- };
- typedef CTrackBarCtrlT<ATL::CWindow> CTrackBarCtrl;
- ///////////////////////////////////////////////////////////////////////////////
- // CUpDownCtrl
- template <class TBase>
- class CUpDownCtrlT : public TBase
- {
- public:
- // Constructors
- CUpDownCtrlT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CUpDownCtrlT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Attributes
- static LPCTSTR GetWndClassName()
- {
- return UPDOWN_CLASS;
- }
- UINT GetAccel(int nAccel, UDACCEL* pAccel) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UINT)LOWORD(::SendMessage(this->m_hWnd, UDM_GETACCEL, nAccel, (LPARAM)pAccel));
- }
- BOOL SetAccel(int nAccel, UDACCEL* pAccel)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)LOWORD(::SendMessage(this->m_hWnd, UDM_SETACCEL, nAccel, (LPARAM)pAccel));
- }
- UINT GetBase() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UINT)LOWORD(::SendMessage(this->m_hWnd, UDM_GETBASE, 0, 0L));
- }
- int SetBase(int nBase)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, UDM_SETBASE, nBase, 0L);
- }
- ATL::CWindow GetBuddy() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return ATL::CWindow((HWND)::SendMessage(this->m_hWnd, UDM_GETBUDDY, 0, 0L));
- }
- ATL::CWindow SetBuddy(HWND hWndBuddy)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return ATL::CWindow((HWND)::SendMessage(this->m_hWnd, UDM_SETBUDDY, (WPARAM)hWndBuddy, 0L));
- }
- int GetPos(LPBOOL lpbError = NULL) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- DWORD dwRet = (DWORD)::SendMessage(this->m_hWnd, UDM_GETPOS, 0, 0L);
- // Note: Seems that Windows always sets error to TRUE if
- // UDS_SETBUDDYINT style is not used
- if(lpbError != NULL)
- *lpbError = (HIWORD(dwRet) != 0) ? TRUE : FALSE;
- return (int)(short)LOWORD(dwRet);
- }
- int SetPos(int nPos)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)(short)LOWORD(::SendMessage(this->m_hWnd, UDM_SETPOS, 0, MAKELPARAM(nPos, 0)));
- }
- DWORD GetRange() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, UDM_GETRANGE, 0, 0L);
- }
- void GetRange(int& nLower, int& nUpper) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- DWORD dwRet = (DWORD)::SendMessage(this->m_hWnd, UDM_GETRANGE, 0, 0L);
- nLower = (int)(short)HIWORD(dwRet);
- nUpper = (int)(short)LOWORD(dwRet);
- }
- void SetRange(int nLower, int nUpper)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, UDM_SETRANGE, 0, MAKELPARAM(nUpper, nLower));
- }
- void SetRange32(int nLower, int nUpper)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, UDM_SETRANGE32, nLower, nUpper);
- }
- void GetRange32(int& nLower, int& nUpper) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, UDM_GETRANGE32, (WPARAM)&nLower, (LPARAM)&nUpper);
- }
- BOOL GetUnicodeFormat() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, UDM_GETUNICODEFORMAT, 0, 0L);
- }
- BOOL SetUnicodeFormat(BOOL bUnicode = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, UDM_SETUNICODEFORMAT, bUnicode, 0L);
- }
- int GetPos32(LPBOOL lpbError = NULL) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- // Note: Seems that Windows always sets error to TRUE if
- // UDS_SETBUDDYINT style is not used
- return (int)::SendMessage(this->m_hWnd, UDM_GETPOS32, 0, (LPARAM)lpbError);
- }
- int SetPos32(int nPos)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, UDM_SETPOS32, 0, (LPARAM)nPos);
- }
- };
- typedef CUpDownCtrlT<ATL::CWindow> CUpDownCtrl;
- ///////////////////////////////////////////////////////////////////////////////
- // CProgressBarCtrl
- template <class TBase>
- class CProgressBarCtrlT : public TBase
- {
- public:
- // Constructors
- CProgressBarCtrlT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CProgressBarCtrlT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Attributes
- static LPCTSTR GetWndClassName()
- {
- return PROGRESS_CLASS;
- }
- DWORD SetRange(int nLower, int nUpper)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, PBM_SETRANGE, 0, MAKELPARAM(nLower, nUpper));
- }
- int SetPos(int nPos)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)(short)LOWORD(::SendMessage(this->m_hWnd, PBM_SETPOS, nPos, 0L));
- }
- int OffsetPos(int nPos)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)(short)LOWORD(::SendMessage(this->m_hWnd, PBM_DELTAPOS, nPos, 0L));
- }
- int SetStep(int nStep)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)(short)LOWORD(::SendMessage(this->m_hWnd, PBM_SETSTEP, nStep, 0L));
- }
- UINT GetPos() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UINT)::SendMessage(this->m_hWnd, PBM_GETPOS, 0, 0L);
- }
- void GetRange(PPBRANGE pPBRange) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(pPBRange != NULL);
- ::SendMessage(this->m_hWnd, PBM_GETRANGE, TRUE, (LPARAM)pPBRange);
- }
- void GetRange(int& nLower, int& nUpper) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- PBRANGE range = {};
- ::SendMessage(this->m_hWnd, PBM_GETRANGE, TRUE, (LPARAM)&range);
- nLower = range.iLow;
- nUpper = range.iHigh;
- }
- int GetRangeLimit(BOOL bLowLimit) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, PBM_GETRANGE, bLowLimit, (LPARAM)NULL);
- }
- DWORD SetRange32(int nMin, int nMax)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, PBM_SETRANGE32, nMin, nMax);
- }
- COLORREF SetBarColor(COLORREF clr)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, PBM_SETBARCOLOR, 0, (LPARAM)clr);
- }
- COLORREF SetBkColor(COLORREF clr)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, PBM_SETBKCOLOR, 0, (LPARAM)clr);
- }
- #ifdef PBM_SETMARQUEE
- BOOL SetMarquee(BOOL bMarquee, UINT uUpdateTime = 0U)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, PBM_SETMARQUEE, (WPARAM)bMarquee, (LPARAM)uUpdateTime);
- }
- #endif
- #if (_WIN32_WINNT >= 0x0600)
- int GetStep() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, PBM_GETSTEP, 0, 0L);
- }
- COLORREF GetBkColor() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, PBM_GETBKCOLOR, 0, 0L);
- }
- COLORREF GetBarColor() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, PBM_GETBARCOLOR, 0, 0L);
- }
- int GetState() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, PBM_GETSTATE, 0, 0L);
- }
- int SetState(int nState)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, PBM_SETSTATE, nState, 0L);
- }
- #endif // (_WIN32_WINNT >= 0x0600)
- // Operations
- int StepIt()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)(short)LOWORD(::SendMessage(this->m_hWnd, PBM_STEPIT, 0, 0L));
- }
- };
- typedef CProgressBarCtrlT<ATL::CWindow> CProgressBarCtrl;
- ///////////////////////////////////////////////////////////////////////////////
- // CHotKeyCtrl
- template <class TBase>
- class CHotKeyCtrlT : public TBase
- {
- public:
- // Constructors
- CHotKeyCtrlT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CHotKeyCtrlT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Attributes
- static LPCTSTR GetWndClassName()
- {
- return HOTKEY_CLASS;
- }
- DWORD GetHotKey() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, HKM_GETHOTKEY, 0, 0L);
- }
- void GetHotKey(WORD &wVirtualKeyCode, WORD &wModifiers) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- DWORD dw = (DWORD)::SendMessage(this->m_hWnd, HKM_GETHOTKEY, 0, 0L);
- wVirtualKeyCode = LOBYTE(LOWORD(dw));
- wModifiers = HIBYTE(LOWORD(dw));
- }
- void SetHotKey(WORD wVirtualKeyCode, WORD wModifiers)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, HKM_SETHOTKEY, MAKEWORD(wVirtualKeyCode, wModifiers), 0L);
- }
- void SetRules(WORD wInvalidComb, WORD wModifiers)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, HKM_SETRULES, wInvalidComb, MAKELPARAM(wModifiers, 0));
- }
- };
- typedef CHotKeyCtrlT<ATL::CWindow> CHotKeyCtrl;
- ///////////////////////////////////////////////////////////////////////////////
- // CAnimateCtrl
- template <class TBase>
- class CAnimateCtrlT : public TBase
- {
- public:
- // Constructors
- CAnimateCtrlT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CAnimateCtrlT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Attributes
- static LPCTSTR GetWndClassName()
- {
- return ANIMATE_CLASS;
- }
- // Operations
- BOOL Open(ATL::_U_STRINGorID FileName)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, ACM_OPEN, 0, (LPARAM)FileName.m_lpstr);
- }
- BOOL Play(UINT nFrom, UINT nTo, UINT nRep)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, ACM_PLAY, nRep, MAKELPARAM(nFrom, nTo));
- }
- BOOL Stop()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, ACM_STOP, 0, 0L);
- }
- BOOL Close()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, ACM_OPEN, 0, 0L);
- }
- BOOL Seek(UINT nTo)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, ACM_PLAY, 0, MAKELPARAM(nTo, nTo));
- }
- // Vista only
- BOOL IsPlaying() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, ACM_ISPLAYING, 0, 0L);
- }
- };
- typedef CAnimateCtrlT<ATL::CWindow> CAnimateCtrl;
- ///////////////////////////////////////////////////////////////////////////////
- // CRichEditCtrl
- #if !defined(_UNICODE) && (_RICHEDIT_VER >= 0x0500)
- #undef MSFTEDIT_CLASS
- #define MSFTEDIT_CLASS "RICHEDIT50W"
- #endif
- template <class TBase>
- class CRichEditCtrlT : public TBase
- {
- public:
- // Constructors
- CRichEditCtrlT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CRichEditCtrlT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Attributes
- static LPCTSTR GetWndClassName()
- {
- #if (_RICHEDIT_VER >= 0x0500)
- return MSFTEDIT_CLASS;
- #else
- return RICHEDIT_CLASS;
- #endif
- }
- static LPCTSTR GetLibraryName()
- {
- #if (_RICHEDIT_VER >= 0x0500)
- return _T("MSFTEDIT.DLL");
- #else
- return _T("RICHED20.DLL");
- #endif
- }
- int GetLineCount() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, EM_GETLINECOUNT, 0, 0L);
- }
- BOOL GetModify() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_GETMODIFY, 0, 0L);
- }
- void SetModify(BOOL bModified = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_SETMODIFY, bModified, 0L);
- }
- void GetRect(LPRECT lpRect) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_GETRECT, 0, (LPARAM)lpRect);
- }
- DWORD GetOptions() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, EM_GETOPTIONS, 0, 0L);
- }
- DWORD SetOptions(WORD wOperation, DWORD dwOptions)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, EM_SETOPTIONS, wOperation, dwOptions);
- }
- // NOTE: first word in lpszBuffer must contain the size of the buffer!
- int GetLine(int nIndex, LPTSTR lpszBuffer) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, EM_GETLINE, nIndex, (LPARAM)lpszBuffer);
- }
- int GetLine(int nIndex, LPTSTR lpszBuffer, int nMaxLength) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- *(LPWORD)lpszBuffer = (WORD)nMaxLength;
- return (int)::SendMessage(this->m_hWnd, EM_GETLINE, nIndex, (LPARAM)lpszBuffer);
- }
- BOOL CanUndo() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_CANUNDO, 0, 0L);
- }
- BOOL CanPaste(UINT nFormat = 0) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_CANPASTE, nFormat, 0L);
- }
- void GetSel(LONG& nStartChar, LONG& nEndChar) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- CHARRANGE cr = {};
- ::SendMessage(this->m_hWnd, EM_EXGETSEL, 0, (LPARAM)&cr);
- nStartChar = cr.cpMin;
- nEndChar = cr.cpMax;
- }
- void GetSel(CHARRANGE &cr) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_EXGETSEL, 0, (LPARAM)&cr);
- }
- int SetSel(LONG nStartChar, LONG nEndChar)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- CHARRANGE cr = { nStartChar, nEndChar };
- return (int)::SendMessage(this->m_hWnd, EM_EXSETSEL, 0, (LPARAM)&cr);
- }
- int SetSel(CHARRANGE &cr)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, EM_EXSETSEL, 0, (LPARAM)&cr);
- }
- int SetSelAll()
- {
- return SetSel(0, -1);
- }
- int SetSelNone()
- {
- return SetSel(-1, 0);
- }
- DWORD GetDefaultCharFormat(CHARFORMAT& cf) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- cf.cbSize = sizeof(CHARFORMAT);
- return (DWORD)::SendMessage(this->m_hWnd, EM_GETCHARFORMAT, 0, (LPARAM)&cf);
- }
- DWORD GetSelectionCharFormat(CHARFORMAT& cf) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- cf.cbSize = sizeof(CHARFORMAT);
- return (DWORD)::SendMessage(this->m_hWnd, EM_GETCHARFORMAT, 1, (LPARAM)&cf);
- }
- DWORD GetEventMask() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, EM_GETEVENTMASK, 0, 0L);
- }
- LONG GetLimitText() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (LONG)::SendMessage(this->m_hWnd, EM_GETLIMITTEXT, 0, 0L);
- }
- DWORD GetParaFormat(PARAFORMAT& pf) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- pf.cbSize = sizeof(PARAFORMAT);
- return (DWORD)::SendMessage(this->m_hWnd, EM_GETPARAFORMAT, 0, (LPARAM)&pf);
- }
- LONG GetSelText(LPTSTR lpstrBuff) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (LONG)::SendMessage(this->m_hWnd, EM_GETSELTEXT, 0, (LPARAM)lpstrBuff);
- }
- BOOL GetSelTextBSTR(BSTR& bstrText) const
- {
- USES_CONVERSION;
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(bstrText == NULL);
- CHARRANGE cr = {};
- ::SendMessage(this->m_hWnd, EM_EXGETSEL, 0, (LPARAM)&cr);
- ATL::CTempBuffer<TCHAR, _WTL_STACK_ALLOC_THRESHOLD> buff;
- LPTSTR lpstrText = buff.Allocate(cr.cpMax - cr.cpMin + 1);
- if(lpstrText == NULL)
- return FALSE;
- if(::SendMessage(this->m_hWnd, EM_GETSELTEXT, 0, (LPARAM)lpstrText) == 0)
- return FALSE;
- bstrText = ::SysAllocString(T2W(lpstrText));
- return (bstrText != NULL) ? TRUE : FALSE;
- }
- #ifdef __ATLSTR_H__
- LONG GetSelText(ATL::CString& strText) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- CHARRANGE cr = {};
- ::SendMessage(this->m_hWnd, EM_EXGETSEL, 0, (LPARAM)&cr);
- LONG lLen = 0;
- LPTSTR lpstrText = strText.GetBufferSetLength(cr.cpMax - cr.cpMin);
- if(lpstrText != NULL)
- {
- lLen = (LONG)::SendMessage(this->m_hWnd, EM_GETSELTEXT, 0, (LPARAM)lpstrText);
- strText.ReleaseBuffer();
- }
- return lLen;
- }
- #endif // __ATLSTR_H__
- WORD GetSelectionType() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (WORD)::SendMessage(this->m_hWnd, EM_SELECTIONTYPE, 0, 0L);
- }
- COLORREF SetBackgroundColor(COLORREF cr)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, EM_SETBKGNDCOLOR, 0, cr);
- }
- COLORREF SetBackgroundColor() // sets to system background
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, EM_SETBKGNDCOLOR, 1, 0);
- }
- BOOL SetCharFormat(CHARFORMAT& cf, WORD wFlags)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- cf.cbSize = sizeof(CHARFORMAT);
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETCHARFORMAT, (WPARAM)wFlags, (LPARAM)&cf);
- }
- BOOL SetDefaultCharFormat(CHARFORMAT& cf)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- cf.cbSize = sizeof(CHARFORMAT);
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETCHARFORMAT, 0, (LPARAM)&cf);
- }
- BOOL SetSelectionCharFormat(CHARFORMAT& cf)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- cf.cbSize = sizeof(CHARFORMAT);
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
- }
- BOOL SetWordCharFormat(CHARFORMAT& cf)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- cf.cbSize = sizeof(CHARFORMAT);
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETCHARFORMAT, SCF_SELECTION | SCF_WORD, (LPARAM)&cf);
- }
- DWORD SetEventMask(DWORD dwEventMask)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, EM_SETEVENTMASK, 0, dwEventMask);
- }
- BOOL SetParaFormat(PARAFORMAT& pf)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- pf.cbSize = sizeof(PARAFORMAT);
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETPARAFORMAT, 0, (LPARAM)&pf);
- }
- BOOL SetTargetDevice(HDC hDC, int cxLineWidth)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETTARGETDEVICE, (WPARAM)hDC, cxLineWidth);
- }
- int GetTextLength() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, WM_GETTEXTLENGTH, 0, 0L);
- }
- BOOL SetReadOnly(BOOL bReadOnly = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETREADONLY, bReadOnly, 0L);
- }
- int GetFirstVisibleLine() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, EM_GETFIRSTVISIBLELINE, 0, 0L);
- }
- int GetTextRange(TEXTRANGE* pTextRange) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, EM_GETTEXTRANGE, 0, (LPARAM)pTextRange);
- }
- int GetTextRange(LONG nStartChar, LONG nEndChar, LPTSTR lpstrText) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- TEXTRANGE tr = {};
- tr.chrg.cpMin = nStartChar;
- tr.chrg.cpMax = nEndChar;
- tr.lpstrText = lpstrText;
- return (int)::SendMessage(this->m_hWnd, EM_GETTEXTRANGE, 0, (LPARAM)&tr);
- }
- DWORD GetDefaultCharFormat(CHARFORMAT2& cf) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- cf.cbSize = sizeof(CHARFORMAT2);
- return (DWORD)::SendMessage(this->m_hWnd, EM_GETCHARFORMAT, 0, (LPARAM)&cf);
- }
- BOOL SetCharFormat(CHARFORMAT2& cf, WORD wFlags)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- cf.cbSize = sizeof(CHARFORMAT2);
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETCHARFORMAT, (WPARAM)wFlags, (LPARAM)&cf);
- }
- BOOL SetDefaultCharFormat(CHARFORMAT2& cf)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- cf.cbSize = sizeof(CHARFORMAT2);
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETCHARFORMAT, 0, (LPARAM)&cf);
- }
- DWORD GetSelectionCharFormat(CHARFORMAT2& cf) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- cf.cbSize = sizeof(CHARFORMAT2);
- return (DWORD)::SendMessage(this->m_hWnd, EM_GETCHARFORMAT, 1, (LPARAM)&cf);
- }
- BOOL SetSelectionCharFormat(CHARFORMAT2& cf)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- cf.cbSize = sizeof(CHARFORMAT2);
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
- }
- BOOL SetWordCharFormat(CHARFORMAT2& cf)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- cf.cbSize = sizeof(CHARFORMAT2);
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETCHARFORMAT, SCF_SELECTION | SCF_WORD, (LPARAM)&cf);
- }
- DWORD GetParaFormat(PARAFORMAT2& pf) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- pf.cbSize = sizeof(PARAFORMAT2);
- return (DWORD)::SendMessage(this->m_hWnd, EM_GETPARAFORMAT, 0, (LPARAM)&pf);
- }
- BOOL SetParaFormat(PARAFORMAT2& pf)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- pf.cbSize = sizeof(PARAFORMAT2);
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETPARAFORMAT, 0, (LPARAM)&pf);
- }
- TEXTMODE GetTextMode() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (TEXTMODE)::SendMessage(this->m_hWnd, EM_GETTEXTMODE, 0, 0L);
- }
- BOOL SetTextMode(TEXTMODE enumTextMode)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return !(BOOL)::SendMessage(this->m_hWnd, EM_SETTEXTMODE, enumTextMode, 0L);
- }
- UNDONAMEID GetUndoName() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UNDONAMEID)::SendMessage(this->m_hWnd, EM_GETUNDONAME, 0, 0L);
- }
- UNDONAMEID GetRedoName() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UNDONAMEID)::SendMessage(this->m_hWnd, EM_GETREDONAME, 0, 0L);
- }
- BOOL CanRedo() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_CANREDO, 0, 0L);
- }
- BOOL GetAutoURLDetect() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_GETAUTOURLDETECT, 0, 0L);
- }
- BOOL SetAutoURLDetect(BOOL bAutoDetect = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return !(BOOL)::SendMessage(this->m_hWnd, EM_AUTOURLDETECT, bAutoDetect, 0L);
- }
- // this method is deprecated, please use SetAutoURLDetect
- BOOL EnableAutoURLDetect(BOOL bEnable = TRUE) { return SetAutoURLDetect(bEnable); }
- UINT SetUndoLimit(UINT uUndoLimit)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UINT)::SendMessage(this->m_hWnd, EM_SETUNDOLIMIT, uUndoLimit, 0L);
- }
- void SetPalette(HPALETTE hPalette)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_SETPALETTE, (WPARAM)hPalette, 0L);
- }
- int GetTextEx(GETTEXTEX* pGetTextEx, LPTSTR lpstrText) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, EM_GETTEXTEX, (WPARAM)pGetTextEx, (LPARAM)lpstrText);
- }
- int GetTextEx(LPTSTR lpstrText, int nTextLen, DWORD dwFlags = GT_DEFAULT, UINT uCodePage = CP_ACP, LPCSTR lpDefaultChar = NULL, LPBOOL lpUsedDefChar = NULL) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- GETTEXTEX gte = {};
- gte.cb = nTextLen * sizeof(TCHAR);
- gte.codepage = uCodePage;
- gte.flags = dwFlags;
- gte.lpDefaultChar = lpDefaultChar;
- gte.lpUsedDefChar = lpUsedDefChar;
- return (int)::SendMessage(this->m_hWnd, EM_GETTEXTEX, (WPARAM)>e, (LPARAM)lpstrText);
- }
- int GetTextLengthEx(GETTEXTLENGTHEX* pGetTextLengthEx) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, EM_GETTEXTLENGTHEX, (WPARAM)pGetTextLengthEx, 0L);
- }
- int GetTextLengthEx(DWORD dwFlags = GTL_DEFAULT, UINT uCodePage = CP_ACP) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- GETTEXTLENGTHEX gtle = {};
- gtle.codepage = uCodePage;
- gtle.flags = dwFlags;
- return (int)::SendMessage(this->m_hWnd, EM_GETTEXTLENGTHEX, (WPARAM)>le, 0L);
- }
- EDITWORDBREAKPROC GetWordBreakProc() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (EDITWORDBREAKPROC)::SendMessage(this->m_hWnd, EM_GETWORDBREAKPROC, 0, 0L);
- }
- void SetWordBreakProc(EDITWORDBREAKPROC ewbprc)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_SETWORDBREAKPROC, 0, (LPARAM)ewbprc);
- }
- int SetTextEx(SETTEXTEX* pSetTextEx, LPCTSTR lpstrText)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, EM_SETTEXTEX, (WPARAM)pSetTextEx, (LPARAM)lpstrText);
- }
- int SetTextEx(LPCTSTR lpstrText, DWORD dwFlags = ST_DEFAULT, UINT uCodePage = CP_ACP)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- SETTEXTEX ste = {};
- ste.flags = dwFlags;
- ste.codepage = uCodePage;
- return (int)::SendMessage(this->m_hWnd, EM_SETTEXTEX, (WPARAM)&ste, (LPARAM)lpstrText);
- }
- int GetEditStyle() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, EM_GETEDITSTYLE, 0, 0L);
- }
- int SetEditStyle(int nStyle, int nMask = -1)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- if(nMask == -1)
- nMask = nStyle; // set everything specified
- return (int)::SendMessage(this->m_hWnd, EM_SETEDITSTYLE, nStyle, nMask);
- }
- BOOL SetFontSize(int nFontSizeDelta)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((nFontSizeDelta >= -1637) && (nFontSizeDelta <= 1638));
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETFONTSIZE, nFontSizeDelta, 0L);
- }
- void GetScrollPos(LPPOINT lpPoint) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(lpPoint != NULL);
- ::SendMessage(this->m_hWnd, EM_GETSCROLLPOS, 0, (LPARAM)lpPoint);
- }
- void SetScrollPos(LPPOINT lpPoint)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(lpPoint != NULL);
- ::SendMessage(this->m_hWnd, EM_SETSCROLLPOS, 0, (LPARAM)lpPoint);
- }
- BOOL GetZoom(int& nNum, int& nDen) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_GETZOOM, (WPARAM)&nNum, (LPARAM)&nDen);
- }
- BOOL SetZoom(int nNum, int nDen)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((nNum >= 0) && (nNum <= 64));
- ATLASSERT((nDen >= 0) && (nDen <= 64));
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETZOOM, nNum, nDen);
- }
- BOOL SetZoomOff()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETZOOM, 0, 0L);
- }
- void SetMargins(UINT nLeft, UINT nRight, WORD wFlags = EC_LEFTMARGIN | EC_RIGHTMARGIN)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_SETMARGINS, wFlags, MAKELONG(nLeft, nRight));
- }
- WORD GetTypographyOptions() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (WORD)::SendMessage(this->m_hWnd, EM_GETTYPOGRAPHYOPTIONS, 0, 0L);
- }
- BOOL SetTypographyOptions(WORD wOptions, WORD wMask) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETTYPOGRAPHYOPTIONS, wOptions, wMask);
- }
- // Operations
- void LimitText(LONG nChars = 0)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_EXLIMITTEXT, 0, nChars);
- }
- int LineFromChar(LONG nIndex) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, EM_EXLINEFROMCHAR, 0, nIndex);
- }
- POINT PosFromChar(LONG nChar) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- POINT point = {};
- ::SendMessage(this->m_hWnd, EM_POSFROMCHAR, (WPARAM)&point, nChar);
- return point;
- }
- int CharFromPos(POINT pt) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- POINTL ptl = { pt.x, pt.y };
- return (int)::SendMessage(this->m_hWnd, EM_CHARFROMPOS, 0, (LPARAM)&ptl);
- }
- void EmptyUndoBuffer()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_EMPTYUNDOBUFFER, 0, 0L);
- }
- int LineIndex(int nLine = -1) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, EM_LINEINDEX, nLine, 0L);
- }
- int LineLength(int nLine = -1) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, EM_LINELENGTH, nLine, 0L);
- }
- BOOL LineScroll(int nLines)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_LINESCROLL, 0, nLines);
- }
- void ReplaceSel(LPCTSTR lpszNewText, BOOL bCanUndo = FALSE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_REPLACESEL, (WPARAM) bCanUndo, (LPARAM)lpszNewText);
- }
- void SetRect(LPCRECT lpRect)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_SETRECT, 0, (LPARAM)lpRect);
- }
- BOOL DisplayBand(LPRECT pDisplayRect)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_DISPLAYBAND, 0, (LPARAM)pDisplayRect);
- }
- LONG FindText(DWORD dwFlags, FINDTEXT& ft) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- #ifdef _UNICODE
- return (LONG)::SendMessage(this->m_hWnd, EM_FINDTEXTW, dwFlags, (LPARAM)&ft);
- #else
- return (LONG)::SendMessage(this->m_hWnd, EM_FINDTEXT, dwFlags, (LPARAM)&ft);
- #endif
- }
- LONG FindText(DWORD dwFlags, FINDTEXTEX& ft) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- #ifdef _UNICODE
- return (LONG)::SendMessage(this->m_hWnd, EM_FINDTEXTEXW, dwFlags, (LPARAM)&ft);
- #else
- return (LONG)::SendMessage(this->m_hWnd, EM_FINDTEXTEX, dwFlags, (LPARAM)&ft);
- #endif
- }
- LONG FormatRange(FORMATRANGE& fr, BOOL bDisplay = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (LONG)::SendMessage(this->m_hWnd, EM_FORMATRANGE, bDisplay, (LPARAM)&fr);
- }
- LONG FormatRange(FORMATRANGE* pFormatRange, BOOL bDisplay = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (LONG)::SendMessage(this->m_hWnd, EM_FORMATRANGE, bDisplay, (LPARAM)pFormatRange);
- }
- void HideSelection(BOOL bHide = TRUE, BOOL bChangeStyle = FALSE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_HIDESELECTION, bHide, bChangeStyle);
- }
- void PasteSpecial(UINT uClipFormat, DWORD dwAspect = 0, HMETAFILE hMF = 0)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- REPASTESPECIAL reps = { dwAspect, (DWORD_PTR)hMF };
- ::SendMessage(this->m_hWnd, EM_PASTESPECIAL, uClipFormat, (LPARAM)&reps);
- }
- void RequestResize()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_REQUESTRESIZE, 0, 0L);
- }
- LONG StreamIn(UINT uFormat, EDITSTREAM& es)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (LONG)::SendMessage(this->m_hWnd, EM_STREAMIN, uFormat, (LPARAM)&es);
- }
- LONG StreamOut(UINT uFormat, EDITSTREAM& es)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (LONG)::SendMessage(this->m_hWnd, EM_STREAMOUT, uFormat, (LPARAM)&es);
- }
- DWORD FindWordBreak(int nCode, LONG nStartChar)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, EM_FINDWORDBREAK, nCode, nStartChar);
- }
- // Additional operations
- void ScrollCaret()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_SCROLLCARET, 0, 0L);
- }
- int InsertText(long nInsertAfterChar, LPCTSTR lpstrText, BOOL bCanUndo = FALSE)
- {
- int nRet = SetSel(nInsertAfterChar, nInsertAfterChar);
- ReplaceSel(lpstrText, bCanUndo);
- return nRet;
- }
- int AppendText(LPCTSTR lpstrText, BOOL bCanUndo = FALSE)
- {
- return InsertText(this->GetWindowTextLength(), lpstrText, bCanUndo);
- }
- // Clipboard operations
- BOOL Undo()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_UNDO, 0, 0L);
- }
- void Clear()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, WM_CLEAR, 0, 0L);
- }
- void Copy()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, WM_COPY, 0, 0L);
- }
- void Cut()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, WM_CUT, 0, 0L);
- }
- void Paste()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, WM_PASTE, 0, 0L);
- }
- // OLE support
- IRichEditOle* GetOleInterface() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- IRichEditOle *pRichEditOle = NULL;
- ::SendMessage(this->m_hWnd, EM_GETOLEINTERFACE, 0, (LPARAM)&pRichEditOle);
- return pRichEditOle;
- }
- BOOL SetOleCallback(IRichEditOleCallback* pCallback)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETOLECALLBACK, 0, (LPARAM)pCallback);
- }
- BOOL Redo()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_REDO, 0, 0L);
- }
- void StopGroupTyping()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_STOPGROUPTYPING, 0, 0L);
- }
- void ShowScrollBar(int nBarType, BOOL bVisible = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_SHOWSCROLLBAR, nBarType, bVisible);
- }
- BOOL SetTabStops(int nTabStops, LPINT rgTabStops)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETTABSTOPS, nTabStops, (LPARAM)rgTabStops);
- }
- BOOL SetTabStops()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETTABSTOPS, 0, 0L);
- }
- BOOL SetTabStops(const int& cxEachStop) // takes an 'int'
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETTABSTOPS, 1, (LPARAM)(LPINT)&cxEachStop);
- }
- #if (_RICHEDIT_VER >= 0x0800)
- AutoCorrectProc GetAutoCorrectProc() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (AutoCorrectProc)::SendMessage(this->m_hWnd, EM_GETAUTOCORRECTPROC, 0, 0L);
- }
- BOOL SetAutoCorrectProc(AutoCorrectProc pfn)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETAUTOCORRECTPROC, (WPARAM)pfn, 0L);
- }
- BOOL CallAutoCorrectProc(WCHAR ch)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_CALLAUTOCORRECTPROC, (WPARAM)ch, 0L);
- }
- DWORD GetEditStyleEx() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, EM_GETEDITSTYLEEX, 0, 0L);
- }
- DWORD SetEditStyleEx(DWORD dwStyleEx, DWORD dwMask)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, EM_SETEDITSTYLEEX, dwStyleEx, dwMask);
- }
- DWORD GetStoryType(int nStoryIndex) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, EM_GETSTORYTYPE, nStoryIndex, 0L);
- }
- DWORD SetStoryType(int nStoryIndex, DWORD dwStoryType)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, EM_SETSTORYTYPE, nStoryIndex, dwStoryType);
- }
- DWORD GetEllipsisMode() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- DWORD dwMode = 0;
- BOOL bRet = (BOOL)::SendMessage(this->m_hWnd, EM_GETELLIPSISMODE, 0, (LPARAM)&dwMode);
- (void)bRet; // avoid level 4 warning
- ATLASSERT(bRet != FALSE);
- return dwMode;
- }
- BOOL SetEllipsisMode(DWORD dwEllipsisMode)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETELLIPSISMODE, 0, dwEllipsisMode);
- }
- BOOL GetEllipsisState() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_GETELLIPSISSTATE, 0, 0L);
- }
- BOOL GetTouchOptions(int nTouchOptions) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_GETTOUCHOPTIONS, nTouchOptions, 0L);
- }
- void SetTouchOptions(int nTouchOptions, BOOL bEnable)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, EM_SETTOUCHOPTIONS, nTouchOptions, bEnable);
- }
- HRESULT InsertTable(TABLEROWPARMS* pRowParams, TABLECELLPARMS* pCellParams)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HRESULT)::SendMessage(this->m_hWnd, EM_INSERTTABLE, (WPARAM)pRowParams, (LPARAM)pCellParams);
- }
- HRESULT GetTableParams(TABLEROWPARMS* pRowParams, TABLECELLPARMS* pCellParams) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HRESULT)::SendMessage(this->m_hWnd, EM_GETTABLEPARMS, (WPARAM)pRowParams, (LPARAM)pCellParams);
- }
- HRESULT SetTableParams(TABLEROWPARMS* pRowParams, TABLECELLPARMS* pCellParams)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HRESULT)::SendMessage(this->m_hWnd, EM_SETTABLEPARMS, (WPARAM)pRowParams, (LPARAM)pCellParams);
- }
- HRESULT InsertImage(RICHEDIT_IMAGE_PARAMETERS* pParams)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HRESULT)::SendMessage(this->m_hWnd, EM_INSERTIMAGE, 0, (LPARAM)pParams);
- }
- BOOL SetUiaName(LPCTSTR lpstrName)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, EM_SETUIANAME, 0, (LPARAM)lpstrName);
- }
- #endif // (_RICHEDIT_VER >= 0x0800)
- };
- typedef CRichEditCtrlT<ATL::CWindow> CRichEditCtrl;
- ///////////////////////////////////////////////////////////////////////////////
- // CRichEditCommands - message handlers for standard EDIT commands
- // Chain to CRichEditCommands message map. Your class must also derive from CRichEditCtrl.
- // Example:
- // class CMyRichEdit : public CWindowImpl<CMyRichEdit, CRichEditCtrl>,
- // public CRichEditCommands<CMyRichEdit>
- // {
- // public:
- // BEGIN_MSG_MAP(CMyRichEdit)
- // // your handlers...
- // CHAIN_MSG_MAP_ALT(CRichEditCommands<CMyRichEdit>, 1)
- // END_MSG_MAP()
- // // other stuff...
- // };
- template <class T>
- class CRichEditCommands : public CEditCommands< T >
- {
- public:
- BEGIN_MSG_MAP(CRichEditCommands< T >)
- ALT_MSG_MAP(1)
- COMMAND_ID_HANDLER(ID_EDIT_CLEAR, CEditCommands< T >::OnEditClear)
- COMMAND_ID_HANDLER(ID_EDIT_CLEAR_ALL, CEditCommands< T >::OnEditClearAll)
- COMMAND_ID_HANDLER(ID_EDIT_COPY, CEditCommands< T >::OnEditCopy)
- COMMAND_ID_HANDLER(ID_EDIT_CUT, CEditCommands< T >::OnEditCut)
- COMMAND_ID_HANDLER(ID_EDIT_PASTE, CEditCommands< T >::OnEditPaste)
- COMMAND_ID_HANDLER(ID_EDIT_SELECT_ALL, CEditCommands< T >::OnEditSelectAll)
- COMMAND_ID_HANDLER(ID_EDIT_UNDO, CEditCommands< T >::OnEditUndo)
- COMMAND_ID_HANDLER(ID_EDIT_REDO, OnEditRedo)
- END_MSG_MAP()
- LRESULT OnEditRedo(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
- {
- T* pT = static_cast<T*>(this);
- pT->Redo();
- return 0;
- }
- // State (update UI) helpers
- BOOL CanCut() const
- { return HasSelection(); }
- BOOL CanCopy() const
- { return HasSelection(); }
- BOOL CanClear() const
- { return HasSelection(); }
- // Implementation
- BOOL HasSelection() const
- {
- const T* pT = static_cast<const T*>(this);
- return (pT->GetSelectionType() != SEL_EMPTY);
- }
- };
- ///////////////////////////////////////////////////////////////////////////////
- // CDragListBox
- template <class TBase>
- class CDragListBoxT : public CListBoxT< TBase >
- {
- public:
- // Constructors
- CDragListBoxT(HWND hWnd = NULL) : CListBoxT< TBase >(hWnd)
- { }
- CDragListBoxT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- HWND hWnd = TBase::Create(TBase::GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- if(hWnd != NULL)
- MakeDragList();
- return hWnd;
- }
- // Operations
- BOOL MakeDragList()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((this->GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) == 0);
- return ::MakeDragList(this->m_hWnd);
- }
- int LBItemFromPt(POINT pt, BOOL bAutoScroll = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return ::LBItemFromPt(this->m_hWnd, pt, bAutoScroll);
- }
- void DrawInsert(int nItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::DrawInsert(this->GetParent(), this->m_hWnd, nItem);
- }
- static UINT GetDragListMessage()
- {
- static UINT uDragListMessage = 0;
- if(uDragListMessage == 0)
- {
- CStaticDataInitCriticalSectionLock lock;
- if(FAILED(lock.Lock()))
- {
- ATLTRACE2(atlTraceUI, 0, _T("ERROR : Unable to lock critical section in CDragListBox::GetDragListMessage.\n"));
- ATLASSERT(FALSE);
- return 0;
- }
- if(uDragListMessage == 0)
- uDragListMessage = ::RegisterWindowMessage(DRAGLISTMSGSTRING);
- lock.Unlock();
- }
- ATLASSERT(uDragListMessage != 0);
- return uDragListMessage;
- }
- };
- typedef CDragListBoxT<ATL::CWindow> CDragListBox;
- template <class T>
- class CDragListNotifyImpl
- {
- public:
- BEGIN_MSG_MAP(CDragListNotifyImpl< T >)
- MESSAGE_HANDLER(CDragListBox::GetDragListMessage(), OnDragListNotify)
- END_MSG_MAP()
- LRESULT OnDragListNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
- {
- (void)uMsg; // avoid level 4 warning
- ATLASSERT(uMsg == CDragListBox::GetDragListMessage());
- T* pT = static_cast<T*>(this);
- LPDRAGLISTINFO lpDragListInfo = (LPDRAGLISTINFO)lParam;
- LRESULT lRet = 0;
- switch(lpDragListInfo->uNotification)
- {
- case DL_BEGINDRAG:
- lRet = (LPARAM)pT->OnBeginDrag((int)wParam, lpDragListInfo->hWnd, lpDragListInfo->ptCursor);
- break;
- case DL_CANCELDRAG:
- pT->OnCancelDrag((int)wParam, lpDragListInfo->hWnd, lpDragListInfo->ptCursor);
- break;
- case DL_DRAGGING:
- lRet = (LPARAM)pT->OnDragging((int)wParam, lpDragListInfo->hWnd, lpDragListInfo->ptCursor);
- break;
- case DL_DROPPED:
- pT->OnDropped((int)wParam, lpDragListInfo->hWnd, lpDragListInfo->ptCursor);
- break;
- default:
- ATLTRACE2(atlTraceUI, 0, _T("Unknown DragListBox notification\n"));
- bHandled = FALSE; // don't handle it
- break;
- }
- return lRet;
- }
- // Overrideables
- BOOL OnBeginDrag(int /*nCtlID*/, HWND /*hWndDragList*/, POINT /*ptCursor*/)
- {
- return TRUE; // allow dragging
- }
- void OnCancelDrag(int /*nCtlID*/, HWND /*hWndDragList*/, POINT /*ptCursor*/)
- {
- // nothing to do
- }
- int OnDragging(int /*nCtlID*/, HWND /*hWndDragList*/, POINT /*ptCursor*/)
- {
- return 0; // don't change cursor
- }
- void OnDropped(int /*nCtlID*/, HWND /*hWndDragList*/, POINT /*ptCursor*/)
- {
- // nothing to do
- }
- };
- ///////////////////////////////////////////////////////////////////////////////
- // CReBarCtrl
- template <class TBase>
- class CReBarCtrlT : public TBase
- {
- public:
- // Constructors
- CReBarCtrlT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CReBarCtrlT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Attributes
- static LPCTSTR GetWndClassName()
- {
- return REBARCLASSNAME;
- }
- UINT GetBandCount() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UINT)::SendMessage(this->m_hWnd, RB_GETBANDCOUNT, 0, 0L);
- }
- BOOL GetBandInfo(int nBand, LPREBARBANDINFO lprbbi) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, RB_GETBANDINFO, nBand, (LPARAM)lprbbi);
- }
- BOOL SetBandInfo(int nBand, LPREBARBANDINFO lprbbi)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, RB_SETBANDINFO, nBand, (LPARAM)lprbbi);
- }
- BOOL GetBarInfo(LPREBARINFO lprbi) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, RB_GETBARINFO, 0, (LPARAM)lprbi);
- }
- BOOL SetBarInfo(LPREBARINFO lprbi)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, RB_SETBARINFO, 0, (LPARAM)lprbi);
- }
- CImageList GetImageList() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- REBARINFO rbi = {};
- rbi.cbSize = sizeof(REBARINFO);
- rbi.fMask = RBIM_IMAGELIST;
- BOOL bRet = (BOOL)::SendMessage(this->m_hWnd, RB_GETBARINFO, 0, (LPARAM)&rbi);
- return CImageList((bRet != FALSE) ? rbi.himl : NULL);
- }
- BOOL SetImageList(HIMAGELIST hImageList)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- REBARINFO rbi = {};
- rbi.cbSize = sizeof(REBARINFO);
- rbi.fMask = RBIM_IMAGELIST;
- rbi.himl = hImageList;
- return (BOOL)::SendMessage(this->m_hWnd, RB_SETBARINFO, 0, (LPARAM)&rbi);
- }
- UINT GetRowCount() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UINT)::SendMessage(this->m_hWnd, RB_GETROWCOUNT, 0, 0L);
- }
- UINT GetRowHeight(int nBand) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UINT)::SendMessage(this->m_hWnd, RB_GETROWHEIGHT, nBand, 0L);
- }
- COLORREF GetTextColor() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, RB_GETTEXTCOLOR, 0, 0L);
- }
- COLORREF SetTextColor(COLORREF clr)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, RB_SETTEXTCOLOR, 0, (LPARAM)clr);
- }
- COLORREF GetBkColor() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, RB_GETBKCOLOR, 0, 0L);
- }
- COLORREF SetBkColor(COLORREF clr)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, RB_SETBKCOLOR, 0, (LPARAM)clr);
- }
- UINT GetBarHeight() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (UINT)::SendMessage(this->m_hWnd, RB_GETBARHEIGHT, 0, 0L);
- }
- BOOL GetRect(int nBand, LPRECT lpRect) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, RB_GETRECT, nBand, (LPARAM)lpRect);
- }
- CToolTipCtrl GetToolTips() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CToolTipCtrl((HWND)::SendMessage(this->m_hWnd, RB_GETTOOLTIPS, 0, 0L));
- }
- void SetToolTips(HWND hwndToolTip)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, RB_SETTOOLTIPS, (WPARAM)hwndToolTip, 0L);
- }
- void GetBandBorders(int nBand, LPRECT lpRect) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(lpRect != NULL);
- ::SendMessage(this->m_hWnd, RB_GETBANDBORDERS, nBand, (LPARAM)lpRect);
- }
- BOOL GetColorScheme(LPCOLORSCHEME lpColorScheme) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(lpColorScheme != NULL);
- return (BOOL)::SendMessage(this->m_hWnd, RB_GETCOLORSCHEME, 0, (LPARAM)lpColorScheme);
- }
- void SetColorScheme(LPCOLORSCHEME lpColorScheme)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(lpColorScheme != NULL);
- ::SendMessage(this->m_hWnd, RB_SETCOLORSCHEME, 0, (LPARAM)lpColorScheme);
- }
- HPALETTE GetPalette() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HPALETTE)::SendMessage(this->m_hWnd, RB_GETPALETTE, 0, 0L);
- }
- HPALETTE SetPalette(HPALETTE hPalette)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (HPALETTE)::SendMessage(this->m_hWnd, RB_SETPALETTE, 0, (LPARAM)hPalette);
- }
- BOOL GetUnicodeFormat() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, RB_GETUNICODEFORMAT, 0, 0L);
- }
- BOOL SetUnicodeFormat(BOOL bUnicode = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, RB_SETUNICODEFORMAT, bUnicode, 0L);
- }
- // requires uxtheme.h to be included to use MARGINS struct
- #ifndef _UXTHEME_H_
- typedef struct _MARGINS* PMARGINS;
- #endif // !_UXTHEME_H_
- void GetBandMargins(PMARGINS pMargins) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, RB_GETBANDMARGINS, 0, (LPARAM)pMargins);
- }
- void SetWindowTheme(LPCWSTR lpstrTheme)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, RB_SETWINDOWTHEME, 0, (LPARAM)lpstrTheme);
- }
- DWORD GetExtendedStyle() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, RB_GETEXTENDEDSTYLE, 0, 0L);
- }
- DWORD SetExtendedStyle(DWORD dwStyle, DWORD dwMask)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, RB_SETEXTENDEDSTYLE, dwMask, dwStyle);
- }
- // Operations
- BOOL InsertBand(int nBand, LPREBARBANDINFO lprbbi)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, RB_INSERTBAND, nBand, (LPARAM)lprbbi);
- }
- BOOL AddBand(LPREBARBANDINFO lprbbi)
- {
- return InsertBand(-1, lprbbi);
- }
- BOOL DeleteBand(int nBand)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, RB_DELETEBAND, nBand, 0L);
- }
- ATL::CWindow SetNotifyWnd(HWND hWnd)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return ATL::CWindow((HWND)::SendMessage(this->m_hWnd, RB_SETPARENT, (WPARAM)hWnd, 0L));
- }
- void BeginDrag(int nBand, DWORD dwPos)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, RB_BEGINDRAG, nBand, dwPos);
- }
- void BeginDrag(int nBand, int xPos, int yPos)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, RB_BEGINDRAG, nBand, MAKELPARAM(xPos, yPos));
- }
- void EndDrag()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, RB_ENDDRAG, 0, 0L);
- }
- void DragMove(DWORD dwPos)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, RB_DRAGMOVE, 0, dwPos);
- }
- void DragMove(int xPos, int yPos)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, RB_DRAGMOVE, 0, MAKELPARAM(xPos, yPos));
- }
- void GetDropTarget(IDropTarget** ppDropTarget) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, RB_GETDROPTARGET, 0, (LPARAM)ppDropTarget);
- }
- void MaximizeBand(int nBand, BOOL bIdeal = FALSE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, RB_MAXIMIZEBAND, nBand, bIdeal);
- }
- void MinimizeBand(int nBand)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, RB_MINIMIZEBAND, nBand, 0L);
- }
- BOOL SizeToRect(LPRECT lpRect)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, RB_SIZETORECT, 0, (LPARAM)lpRect);
- }
- int IdToIndex(UINT uBandID) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, RB_IDTOINDEX, uBandID, 0L);
- }
- int HitTest(LPRBHITTESTINFO lprbht) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, RB_HITTEST, 0, (LPARAM)lprbht);
- }
- BOOL ShowBand(int nBand, BOOL bShow)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, RB_SHOWBAND, nBand, bShow);
- }
- BOOL MoveBand(int nBand, int nNewPos)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((nNewPos >= 0) && (nNewPos <= ((int)GetBandCount() - 1)));
- return (BOOL)::SendMessage(this->m_hWnd, RB_MOVEBAND, nBand, nNewPos);
- }
- void PushChevron(int nBand, LPARAM lAppValue)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, RB_PUSHCHEVRON, nBand, lAppValue);
- }
- // Extra operations
- void LockBands(bool bLock)
- {
- int nBandCount = GetBandCount();
- for(int i =0; i < nBandCount; i++)
- {
- REBARBANDINFO rbbi = { RunTimeHelper::SizeOf_REBARBANDINFO() };
- rbbi.fMask = RBBIM_STYLE;
- BOOL bRet = GetBandInfo(i, &rbbi);
- ATLASSERT(bRet);
- if((rbbi.fStyle & RBBS_GRIPPERALWAYS) == 0)
- {
- rbbi.fStyle |= RBBS_GRIPPERALWAYS;
- bRet = SetBandInfo(i, &rbbi);
- ATLASSERT(bRet);
- rbbi.fStyle &= ~RBBS_GRIPPERALWAYS;
- }
- if(bLock)
- rbbi.fStyle |= RBBS_NOGRIPPER;
- else
- rbbi.fStyle &= ~RBBS_NOGRIPPER;
- bRet = SetBandInfo(i, &rbbi);
- ATLASSERT(bRet);
- }
- }
- #if (_WIN32_WINNT >= 0x0600)
- BOOL SetBandWidth(int nBand, int cxWidth)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, RB_SETBANDWIDTH, nBand, cxWidth);
- }
- #endif // (_WIN32_WINNT >= 0x0600)
- };
- typedef CReBarCtrlT<ATL::CWindow> CReBarCtrl;
- ///////////////////////////////////////////////////////////////////////////////
- // CComboBoxEx
- template <class TBase>
- class CComboBoxExT : public CComboBoxT< TBase >
- {
- public:
- // Constructors
- CComboBoxExT(HWND hWnd = NULL) : CComboBoxT< TBase >(hWnd)
- { }
- CComboBoxExT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Attributes
- static LPCTSTR GetWndClassName()
- {
- return WC_COMBOBOXEX;
- }
- CImageList GetImageList() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CImageList((HIMAGELIST)::SendMessage(this->m_hWnd, CBEM_GETIMAGELIST, 0, 0L));
- }
- CImageList SetImageList(HIMAGELIST hImageList)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CImageList((HIMAGELIST)::SendMessage(this->m_hWnd, CBEM_SETIMAGELIST, 0, (LPARAM)hImageList));
- }
- DWORD GetExtendedStyle() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, CBEM_GETEXTENDEDSTYLE, 0, 0L);
- }
- DWORD SetExtendedStyle(DWORD dwExMask, DWORD dwExStyle)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, CBEM_SETEXTENDEDSTYLE, dwExMask, dwExStyle);
- }
- BOOL GetUnicodeFormat() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, CBEM_GETUNICODEFORMAT, 0, 0L);
- }
- BOOL SetUnicodeFormat(BOOL bUnicode = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, CBEM_SETUNICODEFORMAT, bUnicode, 0L);
- }
- void SetWindowTheme(LPCWSTR lpstrTheme)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, CBEM_SETWINDOWTHEME, 0, (LPARAM)lpstrTheme);
- }
- // Operations
- int InsertItem(const COMBOBOXEXITEM* lpcCBItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, CBEM_INSERTITEM, 0, (LPARAM)lpcCBItem);
- }
- int InsertItem(UINT nMask, int nIndex, LPCTSTR lpszItem, int nImage, int nSelImage,
- int iIndent, int iOverlay, LPARAM lParam)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- COMBOBOXEXITEM cbex = {};
- cbex.mask = nMask;
- cbex.iItem = nIndex;
- cbex.pszText = (LPTSTR) lpszItem;
- cbex.iImage = nImage;
- cbex.iSelectedImage = nSelImage;
- cbex.iIndent = iIndent;
- cbex.iOverlay = iOverlay;
- cbex.lParam = lParam;
- return (int)::SendMessage(this->m_hWnd, CBEM_INSERTITEM, 0, (LPARAM)&cbex);
- }
- int InsertItem(int nIndex, LPCTSTR lpszItem, int nImage, int nSelImage, int iIndent, LPARAM lParam = 0)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- COMBOBOXEXITEM cbex = {};
- cbex.mask = CBEIF_TEXT | CBEIF_IMAGE | CBEIF_SELECTEDIMAGE | CBEIF_INDENT | CBEIF_LPARAM;
- cbex.iItem = nIndex;
- cbex.pszText = (LPTSTR) lpszItem;
- cbex.iImage = nImage;
- cbex.iSelectedImage = nSelImage;
- cbex.iIndent = iIndent;
- cbex.lParam = lParam;
- return (int)::SendMessage(this->m_hWnd, CBEM_INSERTITEM, 0, (LPARAM)&cbex);
- }
- int AddItem(UINT nMask, LPCTSTR lpszItem, int nImage, int nSelImage, int iIndent, int iOverlay, LPARAM lParam)
- {
- return InsertItem(nMask, -1, lpszItem, nImage, nSelImage, iIndent, iOverlay, lParam);
- }
- int AddItem(LPCTSTR lpszItem, int nImage, int nSelImage, int iIndent, LPARAM lParam = 0)
- {
- return InsertItem(-1, lpszItem, nImage, nSelImage, iIndent, lParam);
- }
- int DeleteItem(int nIndex)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, CBEM_DELETEITEM, nIndex, 0L);
- }
- BOOL GetItem(PCOMBOBOXEXITEM pCBItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, CBEM_GETITEM, 0, (LPARAM)pCBItem);
- }
- BOOL SetItem(const COMBOBOXEXITEM* lpcCBItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, CBEM_SETITEM, 0, (LPARAM)lpcCBItem);
- }
- int SetItem(int nIndex, UINT nMask, LPCTSTR lpszItem, int nImage, int nSelImage,
- int iIndent, int iOverlay, LPARAM lParam)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- COMBOBOXEXITEM cbex = {};
- cbex.mask = nMask;
- cbex.iItem = nIndex;
- cbex.pszText = (LPTSTR) lpszItem;
- cbex.iImage = nImage;
- cbex.iSelectedImage = nSelImage;
- cbex.iIndent = iIndent;
- cbex.iOverlay = iOverlay;
- cbex.lParam = lParam;
- return (int)::SendMessage(this->m_hWnd, CBEM_SETITEM, 0, (LPARAM)&cbex);
- }
- BOOL GetItemText(int nIndex, LPTSTR lpszItem, int nLen) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(lpszItem != NULL);
- COMBOBOXEXITEM cbex = {};
- cbex.mask = CBEIF_TEXT;
- cbex.iItem = nIndex;
- cbex.pszText = lpszItem;
- cbex.cchTextMax = nLen;
- return (BOOL)::SendMessage(this->m_hWnd, CBEM_GETITEM, 0, (LPARAM)&cbex);
- }
- BOOL GetItemText(int nIndex, BSTR& bstrText) const
- {
- USES_CONVERSION;
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(bstrText == NULL);
- COMBOBOXEXITEM cbex = {};
- cbex.mask = CBEIF_TEXT;
- cbex.iItem = nIndex;
- LPTSTR lpstrText = NULL;
- BOOL bRet = FALSE;
- for(int nLen = 256; ; nLen *= 2)
- {
- ATLTRY(lpstrText = new TCHAR[nLen]);
- if(lpstrText == NULL)
- break;
- lpstrText[0] = NULL;
- cbex.pszText = lpstrText;
- cbex.cchTextMax = nLen;
- bRet = (BOOL)::SendMessage(this->m_hWnd, CBEM_GETITEM, 0, (LPARAM)&cbex);
- if(!bRet || (lstrlen(cbex.pszText) < (nLen - 1)))
- break;
- delete [] lpstrText;
- lpstrText = NULL;
- }
- if(lpstrText != NULL)
- {
- if(bRet)
- bstrText = ::SysAllocString(T2OLE(lpstrText));
- delete [] lpstrText;
- }
- return (bstrText != NULL) ? TRUE : FALSE;
- }
- #ifdef __ATLSTR_H__
- BOOL GetItemText(int nIndex, ATL::CString& strText) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- COMBOBOXEXITEM cbex = {};
- cbex.mask = CBEIF_TEXT;
- cbex.iItem = nIndex;
- strText.Empty();
- BOOL bRet = FALSE;
- for(int nLen = 256; ; nLen *= 2)
- {
- cbex.pszText = strText.GetBufferSetLength(nLen);
- if(cbex.pszText == NULL)
- {
- bRet = FALSE;
- break;
- }
- cbex.cchTextMax = nLen;
- bRet = (BOOL)::SendMessage(this->m_hWnd, CBEM_GETITEM, 0, (LPARAM)&cbex);
- if(!bRet || (lstrlen(cbex.pszText) < (nLen - 1)))
- break;
- }
- strText.ReleaseBuffer();
- return bRet;
- }
- #endif // __ATLSTR_H__
- BOOL SetItemText(int nIndex, LPCTSTR lpszItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return SetItem(nIndex, CBEIF_TEXT, lpszItem, 0, 0, 0, 0, 0);
- }
- CComboBox GetComboCtrl() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CComboBox((HWND)::SendMessage(this->m_hWnd, CBEM_GETCOMBOCONTROL, 0, 0L));
- }
- CEdit GetEditCtrl() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CEdit((HWND)::SendMessage(this->m_hWnd, CBEM_GETEDITCONTROL, 0, 0L));
- }
- BOOL HasEditChanged() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, CBEM_HASEDITCHANGED, 0, 0L);
- }
- // Non-functional
- int AddString(LPCTSTR /*lpszItem*/)
- {
- ATLASSERT(FALSE); // Not available in CComboBoxEx; use InsertItem
- return 0;
- }
- int InsertString(int /*nIndex*/, LPCTSTR /*lpszString*/)
- {
- ATLASSERT(FALSE); // Not available in CComboBoxEx; use InsertItem
- return 0;
- }
- int Dir(UINT /*attr*/, LPCTSTR /*lpszWildCard*/)
- {
- ATLASSERT(FALSE); // Not available in CComboBoxEx
- return 0;
- }
- int FindString(int /*nStartAfter*/, LPCTSTR /*lpszString*/) const
- {
- ATLASSERT(FALSE); // Not available in CComboBoxEx; try FindStringExact
- return 0;
- }
- };
- typedef CComboBoxExT<ATL::CWindow> CComboBoxEx;
- ///////////////////////////////////////////////////////////////////////////////
- // CMonthCalendarCtrl
- template <class TBase>
- class CMonthCalendarCtrlT : public TBase
- {
- public:
- // Constructors
- CMonthCalendarCtrlT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CMonthCalendarCtrlT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Attributes
- static LPCTSTR GetWndClassName()
- {
- return MONTHCAL_CLASS;
- }
- COLORREF GetColor(int nColorType) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, MCM_GETCOLOR, nColorType, 0L);
- }
- COLORREF SetColor(int nColorType, COLORREF clr)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, MCM_SETCOLOR, nColorType, clr);
- }
- BOOL GetCurSel(LPSYSTEMTIME lpSysTime) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, MCM_GETCURSEL, 0, (LPARAM)lpSysTime);
- }
- BOOL SetCurSel(LPSYSTEMTIME lpSysTime)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, MCM_SETCURSEL, 0, (LPARAM)lpSysTime);
- }
- int GetFirstDayOfWeek(BOOL* pbLocaleVal = NULL) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- DWORD dwRet = (DWORD)::SendMessage(this->m_hWnd, MCM_GETFIRSTDAYOFWEEK, 0, 0L);
- if(pbLocaleVal != NULL)
- *pbLocaleVal = (BOOL)HIWORD(dwRet);
- return (int)(short)LOWORD(dwRet);
- }
- int SetFirstDayOfWeek(int nDay, BOOL* pbLocaleVal = NULL)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- DWORD dwRet = (DWORD)::SendMessage(this->m_hWnd, MCM_SETFIRSTDAYOFWEEK, 0, nDay);
- if(pbLocaleVal != NULL)
- *pbLocaleVal = (BOOL)HIWORD(dwRet);
- return (int)(short)LOWORD(dwRet);
- }
- int GetMaxSelCount() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, MCM_GETMAXSELCOUNT, 0, 0L);
- }
- BOOL SetMaxSelCount(int nMax)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, MCM_SETMAXSELCOUNT, nMax, 0L);
- }
- int GetMonthDelta() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, MCM_GETMONTHDELTA, 0, 0L);
- }
- int SetMonthDelta(int nDelta)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, MCM_SETMONTHDELTA, nDelta, 0L);
- }
- DWORD GetRange(LPSYSTEMTIME lprgSysTimeArray) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, MCM_GETRANGE, 0, (LPARAM)lprgSysTimeArray);
- }
- BOOL SetRange(DWORD dwFlags, LPSYSTEMTIME lprgSysTimeArray)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, MCM_SETRANGE, dwFlags, (LPARAM)lprgSysTimeArray);
- }
- BOOL GetSelRange(LPSYSTEMTIME lprgSysTimeArray) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, MCM_GETSELRANGE, 0, (LPARAM)lprgSysTimeArray);
- }
- BOOL SetSelRange(LPSYSTEMTIME lprgSysTimeArray)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, MCM_SETSELRANGE, 0, (LPARAM)lprgSysTimeArray);
- }
- BOOL GetToday(LPSYSTEMTIME lpSysTime) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, MCM_GETTODAY, 0, (LPARAM)lpSysTime);
- }
- void SetToday(LPSYSTEMTIME lpSysTime)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, MCM_SETTODAY, 0, (LPARAM)lpSysTime);
- }
- BOOL GetMinReqRect(LPRECT lpRectInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, MCM_GETMINREQRECT, 0, (LPARAM)lpRectInfo);
- }
- int GetMaxTodayWidth() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, MCM_GETMAXTODAYWIDTH, 0, 0L);
- }
- BOOL GetUnicodeFormat() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, MCM_GETUNICODEFORMAT, 0, 0L);
- }
- BOOL SetUnicodeFormat(BOOL bUnicode = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, MCM_SETUNICODEFORMAT, bUnicode, 0L);
- }
- #if defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN)
- DWORD GetCurrentView() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, MCM_GETCURRENTVIEW, 0, 0L);
- }
- BOOL SetCurrentView(DWORD dwView)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, MCM_SETCURRENTVIEW, 0, dwView);
- }
- DWORD GetCalendarCount() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, MCM_GETCALENDARCOUNT, 0, 0L);
- }
- BOOL GetCalendarGridInfo(PMCGRIDINFO pGridInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, MCM_GETCALENDARGRIDINFO, 0, (LPARAM)pGridInfo);
- }
- CALID GetCALID() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (CALID)::SendMessage(this->m_hWnd, MCM_GETCALID, 0, 0L);
- }
- void SetCALID(CALID calid)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, MCM_SETCALID, (LPARAM)calid, 0L);
- }
- int GetCalendarBorder() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, MCM_GETCALENDARBORDER, 0, 0L);
- }
- void SetCalendarBorder(int cxyBorder, BOOL bSet = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, MCM_SETCALENDARBORDER, (WPARAM)bSet, (LPARAM)cxyBorder);
- }
- #endif // defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN)
- // Operations
- int GetMonthRange(DWORD dwFlags, LPSYSTEMTIME lprgSysTimeArray) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, MCM_GETMONTHRANGE, dwFlags, (LPARAM)lprgSysTimeArray);
- }
- BOOL SetDayState(int nMonths, LPMONTHDAYSTATE lpDayStateArray)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, MCM_SETDAYSTATE, nMonths, (LPARAM)lpDayStateArray);
- }
- DWORD HitTest(PMCHITTESTINFO pMCHitTest) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, MCM_HITTEST, 0, (LPARAM)pMCHitTest);
- }
- #if defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN)
- void SizeRectToMin(LPRECT lpRect)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, MCM_SIZERECTTOMIN, 0, (LPARAM)lpRect);
- }
- #endif // defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN)
- };
- typedef CMonthCalendarCtrlT<ATL::CWindow> CMonthCalendarCtrl;
- ///////////////////////////////////////////////////////////////////////////////
- // CDateTimePickerCtrl
- template <class TBase>
- class CDateTimePickerCtrlT : public TBase
- {
- public:
- // Constructors
- CDateTimePickerCtrlT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CDateTimePickerCtrlT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Operations
- static LPCTSTR GetWndClassName()
- {
- return DATETIMEPICK_CLASS;
- }
- BOOL SetFormat(LPCTSTR lpszFormat)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, DTM_SETFORMAT, 0, (LPARAM)lpszFormat);
- }
- COLORREF GetMonthCalColor(int nColorType) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, DTM_GETMCCOLOR, nColorType, 0L);
- }
- COLORREF SetMonthCalColor(int nColorType, COLORREF clr)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, DTM_SETMCCOLOR, nColorType, clr);
- }
- DWORD GetRange(LPSYSTEMTIME lpSysTimeArray) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, DTM_GETRANGE, 0, (LPARAM)lpSysTimeArray);
- }
- BOOL SetRange(DWORD dwFlags, LPSYSTEMTIME lpSysTimeArray)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, DTM_SETRANGE, dwFlags, (LPARAM)lpSysTimeArray);
- }
- DWORD GetSystemTime(LPSYSTEMTIME lpSysTime) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, DTM_GETSYSTEMTIME, 0, (LPARAM)lpSysTime);
- }
- BOOL SetSystemTime(DWORD dwFlags, LPSYSTEMTIME lpSysTime)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, DTM_SETSYSTEMTIME, dwFlags, (LPARAM)lpSysTime);
- }
- CMonthCalendarCtrl GetMonthCal() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CMonthCalendarCtrl((HWND)::SendMessage(this->m_hWnd, DTM_GETMONTHCAL, 0, 0L));
- }
- CFontHandle GetMonthCalFont() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return CFontHandle((HFONT)::SendMessage(this->m_hWnd, DTM_GETMCFONT, 0, 0L));
- }
- void SetMonthCalFont(HFONT hFont, BOOL bRedraw = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, DTM_SETMCFONT, (WPARAM)hFont, MAKELPARAM(bRedraw, 0));
- }
- #if defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN)
- DWORD GetMonthCalStyle() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, DTM_GETMCSTYLE, 0, 0L);
- }
- DWORD SetMonthCalStyle(DWORD dwStyle)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (DWORD)::SendMessage(this->m_hWnd, DTM_SETMCSTYLE, 0, (LPARAM)dwStyle);
- }
- void GetDateTimePickerInfo(LPDATETIMEPICKERINFO lpPickerInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, DTM_GETDATETIMEPICKERINFO, 0, (LPARAM)lpPickerInfo);
- }
- BOOL GetIdealSize(LPSIZE lpSize) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, DTM_GETIDEALSIZE, 0, (LPARAM)lpSize);
- }
- void CloseMonthCal()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, DTM_CLOSEMONTHCAL, 0, 0L);
- }
- #endif // defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN)
- };
- typedef CDateTimePickerCtrlT<ATL::CWindow> CDateTimePickerCtrl;
- ///////////////////////////////////////////////////////////////////////////////
- // CFlatScrollBarImpl - support for flat scroll bars
- template <class T>
- class CFlatScrollBarImpl
- {
- public:
- // Initialization
- BOOL FlatSB_Initialize()
- {
- T* pT = static_cast<T*>(this);
- ATLASSERT(::IsWindow(pT->m_hWnd));
- return ::InitializeFlatSB(pT->m_hWnd);
- }
- HRESULT FlatSB_Uninitialize()
- {
- T* pT = static_cast<T*>(this);
- ATLASSERT(::IsWindow(pT->m_hWnd));
- return ::UninitializeFlatSB(pT->m_hWnd);
- }
- // Flat scroll bar properties
- BOOL FlatSB_GetScrollProp(UINT uIndex, LPINT lpnValue) const
- {
- const T* pT = static_cast<const T*>(this);
- ATLASSERT(::IsWindow(pT->m_hWnd));
- return ::FlatSB_GetScrollProp(pT->m_hWnd, uIndex, lpnValue);
- }
- BOOL FlatSB_SetScrollProp(UINT uIndex, int nValue, BOOL bRedraw = TRUE)
- {
- T* pT = static_cast<T*>(this);
- ATLASSERT(::IsWindow(pT->m_hWnd));
- return ::FlatSB_SetScrollProp(pT->m_hWnd, uIndex, nValue, bRedraw);
- }
- // Attributes
- int FlatSB_GetScrollPos(int nBar) const
- {
- const T* pT = static_cast<const T*>(this);
- ATLASSERT(::IsWindow(pT->m_hWnd));
- return ::FlatSB_GetScrollPos(pT->m_hWnd, nBar);
- }
- int FlatSB_SetScrollPos(int nBar, int nPos, BOOL bRedraw = TRUE)
- {
- T* pT = static_cast<T*>(this);
- ATLASSERT(::IsWindow(pT->m_hWnd));
- return ::FlatSB_SetScrollPos(pT->m_hWnd, nBar, nPos, bRedraw);
- }
- BOOL FlatSB_GetScrollRange(int nBar, LPINT lpMinPos, LPINT lpMaxPos) const
- {
- const T* pT = static_cast<const T*>(this);
- ATLASSERT(::IsWindow(pT->m_hWnd));
- return ::FlatSB_GetScrollRange(pT->m_hWnd, nBar, lpMinPos, lpMaxPos);
- }
- BOOL FlatSB_SetScrollRange(int nBar, int nMinPos, int nMaxPos, BOOL bRedraw = TRUE)
- {
- T* pT = static_cast<T*>(this);
- ATLASSERT(::IsWindow(pT->m_hWnd));
- return ::FlatSB_SetScrollRange(pT->m_hWnd, nBar, nMinPos, nMaxPos, bRedraw);
- }
- BOOL FlatSB_GetScrollInfo(int nBar, LPSCROLLINFO lpScrollInfo) const
- {
- const T* pT = static_cast<const T*>(this);
- ATLASSERT(::IsWindow(pT->m_hWnd));
- return ::FlatSB_GetScrollInfo(pT->m_hWnd, nBar, lpScrollInfo);
- }
- int FlatSB_SetScrollInfo(int nBar, LPSCROLLINFO lpScrollInfo, BOOL bRedraw = TRUE)
- {
- T* pT = static_cast<T*>(this);
- ATLASSERT(::IsWindow(pT->m_hWnd));
- return ::FlatSB_SetScrollInfo(pT->m_hWnd, nBar, lpScrollInfo, bRedraw);
- }
- // Operations
- BOOL FlatSB_ShowScrollBar(UINT nBar, BOOL bShow = TRUE)
- {
- T* pT = static_cast<T*>(this);
- ATLASSERT(::IsWindow(pT->m_hWnd));
- return ::FlatSB_ShowScrollBar(pT->m_hWnd, nBar, bShow);
- }
- BOOL FlatSB_EnableScrollBar(UINT uSBFlags, UINT uArrowFlags = ESB_ENABLE_BOTH)
- {
- T* pT = static_cast<T*>(this);
- ATLASSERT(::IsWindow(pT->m_hWnd));
- return ::FlatSB_EnableScrollBar(pT->m_hWnd, uSBFlags, uArrowFlags);
- }
- };
- template <class TBase>
- class CFlatScrollBarT : public TBase, public CFlatScrollBarImpl<CFlatScrollBarT< TBase > >
- {
- public:
- CFlatScrollBarT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CFlatScrollBarT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- };
- typedef CFlatScrollBarT<ATL::CWindow> CFlatScrollBar;
- ///////////////////////////////////////////////////////////////////////////////
- // CIPAddressCtrl
- template <class TBase>
- class CIPAddressCtrlT : public TBase
- {
- public:
- // Constructors
- CIPAddressCtrlT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CIPAddressCtrlT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Atteributes
- static LPCTSTR GetWndClassName()
- {
- return WC_IPADDRESS;
- }
- BOOL IsBlank() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, IPM_ISBLANK, 0, 0L);
- }
- int GetAddress(LPDWORD lpdwAddress) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, IPM_GETADDRESS, 0, (LPARAM)lpdwAddress);
- }
- void SetAddress(DWORD dwAddress)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, IPM_SETADDRESS, 0, dwAddress);
- }
- void ClearAddress()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, IPM_CLEARADDRESS, 0, 0L);
- }
- void SetRange(int nField, WORD wRange)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, IPM_SETRANGE, nField, wRange);
- }
- void SetRange(int nField, BYTE nMin, BYTE nMax)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, IPM_SETRANGE, nField, MAKEIPRANGE(nMin, nMax));
- }
- void SetFocus(int nField)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, IPM_SETFOCUS, nField, 0L);
- }
- };
- typedef CIPAddressCtrlT<ATL::CWindow> CIPAddressCtrl;
- ///////////////////////////////////////////////////////////////////////////////
- // CPagerCtrl
- template <class TBase>
- class CPagerCtrlT : public TBase
- {
- public:
- // Constructors
- CPagerCtrlT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CPagerCtrlT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Attributes
- static LPCTSTR GetWndClassName()
- {
- return WC_PAGESCROLLER;
- }
- int GetButtonSize() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, PGM_GETBUTTONSIZE, 0, 0L);
- }
- int SetButtonSize(int nButtonSize)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, PGM_SETBUTTONSIZE, 0, nButtonSize);
- }
- DWORD GetButtonState(int nButton) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT((nButton == PGB_TOPORLEFT) || (nButton == PGB_BOTTOMORRIGHT));
- return (DWORD)::SendMessage(this->m_hWnd, PGM_GETBUTTONSTATE, 0, nButton);
- }
- COLORREF GetBkColor() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, PGM_GETBKCOLOR, 0, 0L);
- }
- COLORREF SetBkColor(COLORREF clrBk)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (COLORREF)::SendMessage(this->m_hWnd, PGM_SETBKCOLOR, 0, (LPARAM)clrBk);
- }
- int GetBorder() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, PGM_GETBORDER, 0, 0L);
- }
- int SetBorder(int nBorderSize)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, PGM_SETBORDER, 0, nBorderSize);
- }
- int GetPos() const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, PGM_GETPOS, 0, 0L);
- }
- int SetPos(int nPos)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, PGM_SETPOS, 0, nPos);
- }
- // Operations
- void SetChild(HWND hWndChild)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, PGM_SETCHILD, 0, (LPARAM)hWndChild);
- }
- void ForwardMouse(BOOL bForward = TRUE)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, PGM_FORWARDMOUSE, bForward, 0L);
- }
- void RecalcSize()
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ::SendMessage(this->m_hWnd, PGM_RECALCSIZE, 0, 0L);
- }
- void GetDropTarget(IDropTarget** ppDropTarget)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- ATLASSERT(ppDropTarget != NULL);
- ::SendMessage(this->m_hWnd, PGM_GETDROPTARGET, 0, (LPARAM)ppDropTarget);
- }
- };
- typedef CPagerCtrlT<ATL::CWindow> CPagerCtrl;
- ///////////////////////////////////////////////////////////////////////////////
- // CLinkCtrl - Windows SYSLINK control
- template <class TBase>
- class CLinkCtrlT : public TBase
- {
- public:
- // Constructors
- CLinkCtrlT(HWND hWnd = NULL) : TBase(hWnd)
- { }
- CLinkCtrlT< TBase >& operator =(HWND hWnd)
- {
- this->m_hWnd = hWnd;
- return *this;
- }
- HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
- DWORD dwStyle = 0, DWORD dwExStyle = 0,
- ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
- {
- return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
- }
- // Attributes
- static LPCTSTR GetWndClassName()
- {
- #ifdef _UNICODE
- return WC_LINK;
- #else // !_UNICODE
- return "SysLink";
- #endif // !_UNICODE
- }
- int GetIdealHeight(int cxMaxWidth = 0) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LM_GETIDEALHEIGHT, cxMaxWidth, 0L);
- }
- BOOL GetItem(PLITEM pLItem) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LM_GETITEM, 0, (LPARAM)pLItem);
- }
- BOOL SetItem(PLITEM pLItem)
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LM_SETITEM, 0, (LPARAM)pLItem);
- }
- // Vista only
- int GetIdealSize(SIZE& size, int cxMaxWidth = 0) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (int)::SendMessage(this->m_hWnd, LM_GETIDEALSIZE, cxMaxWidth, (LPARAM)&size);
- }
- // Operations
- BOOL HitTest(PLHITTESTINFO pLHitTestInfo) const
- {
- ATLASSERT(::IsWindow(this->m_hWnd));
- return (BOOL)::SendMessage(this->m_hWnd, LM_HITTEST, 0, (LPARAM)pLHitTestInfo);
- }
- };
- typedef CLinkCtrlT<ATL::CWindow> CLinkCtrl;
- ///////////////////////////////////////////////////////////////////////////////
- // CCustomDraw - MI class for custom-draw support
- template <class T>
- class CCustomDraw
- {
- public:
- // Message map and handlers
- BEGIN_MSG_MAP(CCustomDraw< T >)
- NOTIFY_CODE_HANDLER(NM_CUSTOMDRAW, OnCustomDraw)
- ALT_MSG_MAP(1)
- REFLECTED_NOTIFY_CODE_HANDLER(NM_CUSTOMDRAW, OnCustomDraw)
- END_MSG_MAP()
- // message handler
- LRESULT OnCustomDraw(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
- {
- T* pT = static_cast<T*>(this);
- pT->SetMsgHandled(TRUE);
- LPNMCUSTOMDRAW lpNMCustomDraw = (LPNMCUSTOMDRAW)pnmh;
- DWORD dwRet = 0;
- switch(lpNMCustomDraw->dwDrawStage)
- {
- case CDDS_PREPAINT:
- dwRet = pT->OnPrePaint(idCtrl, lpNMCustomDraw);
- break;
- case CDDS_POSTPAINT:
- dwRet = pT->OnPostPaint(idCtrl, lpNMCustomDraw);
- break;
- case CDDS_PREERASE:
- dwRet = pT->OnPreErase(idCtrl, lpNMCustomDraw);
- break;
- case CDDS_POSTERASE:
- dwRet = pT->OnPostErase(idCtrl, lpNMCustomDraw);
- break;
- case CDDS_ITEMPREPAINT:
- dwRet = pT->OnItemPrePaint(idCtrl, lpNMCustomDraw);
- break;
- case CDDS_ITEMPOSTPAINT:
- dwRet = pT->OnItemPostPaint(idCtrl, lpNMCustomDraw);
- break;
- case CDDS_ITEMPREERASE:
- dwRet = pT->OnItemPreErase(idCtrl, lpNMCustomDraw);
- break;
- case CDDS_ITEMPOSTERASE:
- dwRet = pT->OnItemPostErase(idCtrl, lpNMCustomDraw);
- break;
- case (CDDS_ITEMPREPAINT | CDDS_SUBITEM):
- dwRet = pT->OnSubItemPrePaint(idCtrl, lpNMCustomDraw);
- break;
- default:
- pT->SetMsgHandled(FALSE);
- break;
- }
- bHandled = pT->IsMsgHandled();
- return dwRet;
- }
- // Overrideables
- DWORD OnPrePaint(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/)
- {
- return CDRF_DODEFAULT;
- }
- DWORD OnPostPaint(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/)
- {
- return CDRF_DODEFAULT;
- }
- DWORD OnPreErase(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/)
- {
- return CDRF_DODEFAULT;
- }
- DWORD OnPostErase(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/)
- {
- return CDRF_DODEFAULT;
- }
- DWORD OnItemPrePaint(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/)
- {
- return CDRF_DODEFAULT;
- }
- DWORD OnItemPostPaint(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/)
- {
- return CDRF_DODEFAULT;
- }
- DWORD OnItemPreErase(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/)
- {
- return CDRF_DODEFAULT;
- }
- DWORD OnItemPostErase(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/)
- {
- return CDRF_DODEFAULT;
- }
- DWORD OnSubItemPrePaint(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/)
- {
- return CDRF_DODEFAULT;
- }
- };
- } // namespace WTL
- #endif // __ATLCTRLS_H__
|