dundas@sapphire.jpl.nasa.gov (John Dundas) (06/14/90)
There was quite a discussion some while back about how to center windows, dialogs, alerts, and the like, on the screen. I don't recall seeing any adequate resolution of the issue, though. Enclosed within this message is a StuffIt/binhex file which contains two MPW C 3.x source files. The first file is simply an include (CenterDialog.h) file defining some constants that are useful. The second (CenterDialog.c) contains one function which will load a 'WIND', 'ALRT', or 'DLOG' resource and modify the in-memory template so that it is centered with respect to some user specified criteria. These criteria include: Center horizontally Center vertically Center in the top third Account for title height (or extra frame height) Account for menu bar height Determine best monitor based on another rectangle Advantages: (1) Works correctly with any number of monitors of any resolution in any orientation. (2) Presents a simple interface with a lot of flexibility. (3) Uses no QuickDraw globals and may therefore be used in code which doesn't necessarily have access to QuickDraw globals. (4) It's free! The source code is Copyright (c) 1990 by John Dundas, but may be freely distributed under the terms of the "GNU General Public License." The only documentation currently available is included within the source files themselves. There is also currently no example code; however, the following sequence works well for me. GetPort (&prevPort); box = prevPort->portRect; LocalToGlobal ((Point *) &box.top); LocalToGlobal ((Point *) &box.bottom); CenterDialog ('DLOG', DLOG_ID, (CENTMIDWID|CENTTOPTHRD), 0, &box, menuHeight); dlog = GetNewDialog (DLOG_ID, NULL, (DialogPtr) -1); Suggestions and contributions are very welcome. One feature currently missing (but easy to add) is centering within (around) another region. This will certainly be added at a future date. Flames, complaints, etc., without code to fix them should be directed to the nearest trash can. Reply directly to: dundas@sapphire.jpl.nasa.gov John Dundas (This file must be converted with BinHex 4.0) :#N0PER4PFLjcDA3!8dP8)90*9#%!!!!!&,S!!!!!-LT6593K!!)!!"5kFNaKG3% !!!!!!!!!!J)13f9ZG'9b4'PKE'pR,QKDKai!H)f'!&U(&J-@!(Kj2J$m!!m"(J! a!&U(-J"AVN`!9kj-!3B!)3!"!!!!@SG-9%9B9%e38b!"!+*D@RkLR1[B!!!"IJ! !!PJ!!!$b!!!"b)18'Z)!!!!!!!"1hJ!!"!JSN!!*3B-"C4"Fb(!K!aJ#'cCd-+5 -'cTPj""*%iE0Qc-Zd,333*!!5K%X9*T!Q3)LJ%X[!8fL9-R5C3![!3!&c$&!)N- #M84TdH)RS!!X!3-8"@#!SG+!689PB@"-D"C+#b(Sp#Q4`,5)ADq"j3U!#4)V33` `H41'6-Bb&U@8'82(44Lb$8N'(12@MKSbE0L!#!KNS%3N!"3-H90(6TU-!)S3D6$ #VCNdEXSN'&,%L8NT4*)%BI,Nb"HQ!"!!J!+JC6F"29Dh$[#kKbK1kl$K(@Zii%' ##TAd`TI!%8%1!"3#S#Q&S))"lIlpBlJ%(ai[9$3!3A")'6GdbXJKNLB-QcGRA+" T-*!!B+SKEq$NNC2Q$"Sk)',Nb!%$K*Jm)*5m3H-'"*%kEXL%QG-J!45&EG,-QC2 Q68ZG)-l)#B1`$"N3G0k!D"0Q64N34)q5d8Q(SjJk#8(B85JQ$*ddE8#-bCLQc"` 3Em`J43286"SfC@V#NI2'6KSb4YGkAIYdV%D1(N'kHI0ec01SDi(#`DQ6Tdm3J`X IP[0dVPQ&@mR8I1b3!)eBXQCG8%a!KHhC1@RTh!P$'B4LZREa(S@*9`jIT$M2TVd YiSL6+L#1(&6S%!581Q,BT"N$JXRbJh2+Z""4%`VFQ8mTQe')9'NDN!"QhYJQM)B li)pR%Bq0qEfRQcQL3DKi3A&%'M-abjK*-+5)%bT&5%&%%N%`mF34Ab$a"4&&'*' %%d83dF!)H,RP4KRmq3HJJ!3DL+##$$S)SB369TM'K4Rqed354&c"BJ)S`)!($$6 'N!"#!J'"B&"4YU%KAKTkq%4(ChNNN!$!I#AUGb+'rIe(a403)&'J%6$+5#---Yb Biii*fED9()84D555&#U*BT082!N&&8J)@1@-00+JT3SJ8*&4BR)Fp@@BE,"4j*( d6AM39'Bd!!)#$N0PER4PFN4TB@a[CbjM@SFH!(L0KJ"DKaB$&J"iH6i!r!!2!4i !-3"DKc)!9kj-!&HZ6!%'!#%!!3!!!&U(6&4&@&408&-J!3#KNa6RSTcVTJ!!!Ai !!"`&!!!"*`!!$q2YIBj2!!!!!!!!ES%!!!3)+*!!#8'$!@@!D!%#"BSlEXM-5D- (a!S3-9+!H!SSG$4)N5'1Q)4Ni,4`-+H1'6KNj40+%BI2QM)Xa,333T&)%#j8 Q8+D!#%#d6N#H2S%+*4UJ$Y'!13B3R%U93+03NbLF#mLK3-!!IXkJS@-4"*SbDF6 5`91f"NL4CGM-+405j-N@2X5mU40aMT3bBqLiS2-'MX8HCY'UaI-f`GfmHr[q$Ha #,ah#E8!JIUbAVm6*JJNE[JK4)X@&LG11C4bb6dJN"'%V',*A6TUA!0+i'F1Q$TN b)(MmR90l6*Nj,Y$iD$!L$3!$!"!!8!&J3)"Z![S!i!'!a2AXSMLY-d@e[%##!lm L","H"J!P[I!PF%53!!-!p`#85L'SB%#lIrp3YF3p%!![9)!B8XB0R6*bL+3*`qE 0'4GM3+Kid5!JL&4$hX$*)bI0'64d3-6)N3-'#$&j3#KjJmB0##*eh*!!#61R33) S#0ZNQ6-Rc4ZA1d'FN42'B"Nb)1Lm!G%Qc*Sb))SL*E166NFaG3k#X)036"JkDGU !'+-a6CNj)0kB5BSQU*NdE-VBK#2RMCddC)kbrFS@+YQ0(6q'G2-'l"LS8YN'KC0 cCmqI)!JE4L`(+Yfc#,Q5X3QC)CZaCFqkD'#65PZdFp65Z41Q-SM&GHrQ44ScVjb q5A1L9BYEa"%R98!F+BL3!#%)+(A%X%N6N3RcJR2+Z""K%dTFQP!VQd'BG'QDN!" QhY`ZM)ClB*!!D"16PIRGTjXjSbH5$YK!)SJJBmM+SHVQ6(F3dL"44e-Z*@'8('D %FCK`GH"9aR*ZR+8$###B"P83F-!4edYRVD%8(#!BH"###TE"`M6e#35(#b$88!- ,!$EaaK`K8F@3!%04b449A(+%*-BEH*`&`KaS[&%('dL*i9G")qU9KNYdP!G#(4P b&f8Dqk@BePT43MA('*89"1-GD(a9"PHhpD5(Pf#@89"IH96M'P9cD"K'(RVpa#+ &&S*3"Kk(`3(@6mQJD*m91pAK@4i`*J(#CG[GTY5ME*5)fiH+lEFPEMrLm4U88P, *Q+4YDDU@PPf#3+HGHHaT@P""TCTAJNIk@%DCGiN(3RLNZKA6')1kX5F5Epaa*RF SD9P(6rhKGN),5#'4a"&I6%'&&%N-3F8*D3RURUTeG03X@@h!!GGAlX'B+SdG!AY IKR&T1HZ6l8&f"ebI+6PPG%Jp5@-CBC!!X@F3C&!9l+,U5MPV',@HG'XBZGjf,aY XD0Q'A9"e+Q58I2ejN!#1F0!88UTaQ4%5EqZfqHDN6"4K""9&%(&%%BqQ%53ED#Q &UT6RRFbPP#@(G03C82Pl8-"l6K(@ZA+``HK*3!SCaSpFADV4TQ()Za1V)+#Jkj1 iY9&3(5HePKDS8$8&pUU9jT%##"2R#e9$aPD'e%q6GUPeR@f2*K&&$Bc`j"KXe*% A#$a3N3GMm+(K3q#$&hii$e+FCD3FKcAqZ1"Z%'ii9$a%dH!BDa""e"dZ1!jjjj+ $IX@6C"5VqHUH6rl%&&@!KA2UQdIq1H)+hAM'l*cA$RS6C9`X4kZU&pmk##)3G'$ `$6f%"RAdfIFU@N'&-53FKB'JaV)M,j9UcjZ5A)E*IT*"G2T5IKQQ5lb#))3*9i$ 3K))efIH6ddPcdkl#eDAEa1i13%(EN!!ZYk$kI3FYbj*1LLJbJRP&+!%YHeR-CTB !&-`J"494JCB8BSC)-3N%Di$GEYBbP$$!S5eM3%YHlT+jX46&BDSk#jM5S+3NT54 961U)N!$!TMIlY2#&c*(KQCi$JZA3D%pAS!a8rTH5*cATArebLB,!`K8BbFp08&V F@EaS[[*S+6`8+pD6r,-H'K8P*1[KLK[-BK#Rq3N2Pq(*aU5dQU@)iB&l%9VRhP! ZQZ5X20(4dPHX`X1XL)C2Ti%E[R!B3D53!1P0AbV+(*X9TEV8i51iQ5%6R8L(!-V &2NPS!JLXd))Bb)!'Zp+9'3KB(J1@J3jKJ!Ym*KJi#jBK!8(39K+X8)3T$%%+45L #%cU)JKJJMJG$8TNEL,$%`lb0$eec*JqJqF@#i)H,C8J"#!0(Pc#FS5N*L-ijQC5 !r6eT2J,4%K2H%$$Fe+N-BdM$@r4LSqVP##Q(19"8mL-Hr[JREr'6jPM#9CNkjN& ,B)ZJhe53!!!kL$%")1J"##UAQR!Yb++-kCTd(J+M%e`K#8iJ`JP+5J3Q21%)+`A "#B,!"#PX#dDh()-,8M$4"1!&SaVP+!1,KK3h$%K*FZLT'5Se2+$DlcZlBLTD82! %+Ca!,dSK@J(I4T0BT[%1Fp""LK,Je#%SN`T05!)46NS%#V9J,%cL6T%kSJHm,DU RC6dV&Ci!"563e!JJH'Y!4l39K"MQVQ20Ua1SX&FS8!%*8QMV@c&e*8fKkE!85iR Ad054[+$&V)YYV&qCB!5HMV8m(J%*(TaD"$aBaAZS&8aN`UFJXX6N)%KaS%Yq9*X 9UQSKrZa8BLR8Y65i3$VUqXk'[#)('*Q"+',$+4edbP-+6D&)4dV5&-@!bbITjEQ %(#k&lL@6BZA`,A--eU2UFKJbK%Z#%NR!*5[Me-S"UbKRf""[V)L3!,1%"!9Jbqm E[2)CXK6d5@DD3`TfS"LdM1''be*8CX@,``&h0d+jVBYB8M8'KTl3DlHj6+k@pEB @QJ%+9QQ"$m$A)rZ@FUa0%!)5bT!!fT!!D(6'0Gk8f)aDYYX!f#AQZTQ#*`Si1l` ",`1*Dd+!Lb-8J04%Vb'$Fk8+SpLUGNbeK(+-F5`B%,Ba*"a9('2)qZ3G01$,3jS V(FL+PbQEF`jQ4V-9b@TP1Z!KcMqKd8EaZHB%U'#qC6$cR-QkC4S,aXalX-N4L(* LUj!!p3jY')UC%d!pKca@*Qa)3*PN-ZP+Ri%++*C$!XJ!KdN2@RjU'T0-8VfV,BT RdP2)`ab+i!Blf,HLjEQ#H*!!01NM%!%*8SP,!MiLP8QlQ+cGG)1kNJF(&dpk$'8 5G6TaHC!!5FHN*fI!F"0rFSB%0!823DK-''$8'S#C1AX#BF)Y6i!@p0iY+e(KlFL NG)GGNb%%[%a!V'GGDbcPZ@XGPX1qD@d(+b"N$M!b3CGdh63b,$L%@VTIrN6(R0+ GlM9S!GJFmX$J!KCY0fk`idrB0,pr`Xe,BG&35LbF5e"p48Z9Z@pr0J6H$8XT#$@ !Qlf*E"0pGLd%I@%iNP*(Ni`d4!j4)-,E%Nh@iG$K#NdB#K6%mem63(SS$dHf3M9 kG6QSQ-9dF,C0qZ!RR%%PdHJHb"Z1M['S02%lG0L3!2+J3T85-UGK1QM"fi!1JLK 'aNe)Q44Vf,!'YRJ5P#5VbTDdG%3BjT!!KN*Ub"Y5f+ckH5rC))Jj,QF1&6)a"`f I'P&dJ(A)l2!C[r(bheVi@jNR8ZJ+jA'*XAB&Zl0"Q9a`F#4ZbZfpr4jSp-&bPC4 1S-m6S-UrfjjmZh9&XYB36Fqmha6VJIqY0q5(5QEaBBj@rM15Ja(QTqFmI#L8NBf mKJjSd6cUS9+rbqd,[[)K+l&eT&'RZh1DeB3+#V)qE60P&!4)i(463'hkK`,!KQR K*"5EjR#6PJ")-%qNdc8'''`*1(m-D"2TY(9GS`)UB)%mG3CN)(CNK346F%X$k(m S-)%)@'),k%8%b(rI&Qi!mhm`d)$eJ`)@5#(eGd[8"(R1S@IlY`0NC4(d!KB-N3C ViQF839E%45%j'!)D08GX))4$+"#H&aFZN!#&5SL"6DL!LI&r6ZF%(Y1$6)5$#bK 1),!(#@!4B@!bh!%`d*D&,K"rb%D!raH!*QL(+AL!C"!A,#J9r1H!%&KiHdL"IbJ 6JHKc+!"d+FL"(ZJ#)'J%8J8#*R!I`N4-aS4-bS5'6%G@$PL#G(##@P')+qL&-Z' #CK+)#E!HB'&8JBD"#G!(X+L)*3JX,YBeJ*C`+1#)C`L*)FKR#AF3jH*LR!L,#4" p'Z9Nc1CL,S!qJC8E`mKR,K!dEb0#RSK4AGJe`YKXd[JMG+!8BM&CbbL0(k++LKK p2X!8B3"ZiVCdaTL"*CH-[!L)[LL#eaL$i[Cr[0H!C#@,RZL2)`L+SPL!I1L(TLK P3r+#$5L,DCF%2a-8Q"Fl3L)CS'%3,BFE"VBI#(B3D,%&--!#-0!&Ri)ESX)G33- DFK!KcE8c+a0*Q2GJEN#4Z!)9UE*MC-0F)rNGHq+3!!h@GKb'(6"#*`q@*IC4Nf2 6Bb"3Cir5'Q%J0L2#Fi*M"JN!!aLSL)bBE#k!+6fJ85CK!T@)P5HjP5!!!q)81!q 55'bf&LKJ%Q+T!LM3%-fL!QpM!PKCMQE*(QB!Li@@Be`jD3`T3[B4"0r)E18M&,H %'kdh90"S*eT42qGM14ie4DYh)2keNkX(4d9a!R5J*ITb"SAa-6"b"QP3096#FjU @'-RSDCI@KfrMG%)9QGSS4M##&eQRL!ZB89%)&qj)9[XQ"'i#)Kl%Ij9""q(L"Rj T%r-8-+q*134TL%N*L*2fJ0C(L#VBK`PiKZF'Q!+4%E9Q@*N(QFcjR!Mi(pi$2U` A5lF44`9"4iGKQU6fIbLJQU(f0VZ)R4!AQ'a!@)mTFrR&IVSb@!La4T*d*3Sd9dK S9jp"&6[f'-+5EiUi9'p'L30a9QQe9QUeQr#S*[q(PHMc9Q#j2R63J!K%"KUU8D5 QBVbeDXcBSDS#"bKU*#SUM8(6J#IU!bP+SX`BPK+)!UL'K##`!L,a0Qq&!L1US8! D!fMi!L!J!fqc!XDBM4pU-YQT*903&0q4%Y#'6i4)4Dqa&K)(!NPAA5(5IGr*RaX 5&,MR5)(R4rUR(jVR0#"N(`"U0`XN0S$f(qV$2LL6822MA1+a)&!e2RSf"mXK'(D %80P4BeUbTh-$SZhc2NB$-!)$54#*A8Lb)h5$N3d4(9$M+3#f&NAK0[p")rM#Q9" a&cfK(2#R*IZ6"rTb*DKKUB'(I1E8FRU@Td,M2T+*N4jQ%&"6'`+UIT`(8Hpa0%L 4'28Q"i8(0Q6"GKGc1&eP,"6c!rMf0j!!)j98QCCG8k-h1JFjkUJmS&&45JFJj)R F#U-i+U11+Ul50)f1#U3C"$-b8`4Q0J)&8AFBH+kpYD*mfD)[ZUrUbMj!@U4)H*` qTCB31M`5LJ+Ja9Km09U!K8d0feL2&9R&U+dSN!#`D&'*%mYA&DYdX*JJ`+)V'M8 $$AL@FZ'*)UX8Yk&4-Y#!&T'Q@J%aZ93TU[UGaZ&IrNH(2DS(m)Q9hJL1ceLA'L' NqL0MKJB5-#X3-JX9%A)8HL&ZRk'c@N'("1ZcbDL[-3SX,K#dK25-@TZZA&Z12jU 85@YRpDT2Xq+!de)Yej)Y9*!!VbjUSqMUVH4i0FQBJMeEYNJ+!NUkXZ*KY#PiYAc l0NV+T%hkT%e)Y#!#T(XT@d"DChGQPQBRYrqkYD@NP6ZkYdFUZ)6EZBEEDL-V"iP lM9h)Z'AlZ#"4YT*EVrHU6e@TPN#hF$YA*R0JG1+4G*4BL@&VYf0l0H&kY&bfZT& lYRK3VQ69ZmbSZDSE%X9EBj1E[(2EVFcSY@*KSY0EYmYl031lDMlk9UdlGMD""&8 3FY-TJ39jRG"jR`*4[Va#R'jJ*Nk6-(lK'A,99B3"0hHb+F-T4(I"5C'dJ"[5KS6 eB"5c4PS5KQ9`"jlf!JT4*c2LD@NK-@9b%'K#EL!6,U)*`&-8'!Mf'BNCQ6YCV*, +!PSbHce4,RB81fj3$5(4&-Tk+@h4,)5"((,`2SQ4+K&d'dSbQ1NTEPSK+daf"K$ 9"Q*M)`GK4`6-(3B-)3F95Cl8LS'@&J9d,jc+B8SQS0#'Ae*6'9Ub(%paU'`D9FY 5([fb&ZAK3Nb421+4%VEV-'q#HeYd&%3'!MCK%8MJ"'pJ`qq$!YKTVE*)'V%%!!!: