标题: [分享] VC技巧集锦 [打印本页] 作者: huashi3483 时间: 2004-9-27 18:30 标题: [分享] VC技巧集锦 <><FONT style="FONT-SIZE: 12px; FONT-FAMILY: MS Shell Dlg, Tahoma, sans-serif, 宋体">一、打开CD-ROM 6 O, _9 Z2 H# u% U4 T! lmciSendString("Set cdAudio door open wait",NULL,0,NULL);" T2 F7 ?! V5 r/ B* ^- M
' X6 V! f# u) o# D Q1 W6 \1 H ]0 e. C$ L$ l8 t
二、关闭CD_ROM2 V) i D; v* B! n9 d0 r5 a
mciSendString("Set cdAudio door closed wait",NULL,0,NULL);3 j1 q% V& n$ r
h X* A8 C0 a U, y- T; s
5 ~4 E' D3 d C7 u" Q
三、关闭计算机 * r7 j* U1 }6 J& gOSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构 z8 T. X8 B! \6 \( D. k( E0 HOsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);, I6 L2 X4 ]$ a6 g
GetVersionEx(&OsVersionInfo); //获取操作系统版本信息 - z/ C% v8 @4 U3 Eif(OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) & D N! Z; c3 d{ ' w4 f# k5 [: U, x! u//Windows98,调用ExitWindowsEx()函数重新启动计算机& Q& v1 i3 W" i( c6 {* e
DWORD dwReserved;- d" B2 s! B4 m# k" \
ExitWindowsEx(EWX_REBOOT,dwReserved); //可以改变第一个参数,实现注销用户、 ) k2 j, s& w( J3 ]% R( z' h
//关机、关闭电源等操作 3 Z* T3 ~ o' `3 o* L( m/ Z # K* y, O' f8 E// 退出前的一些处理程序4 R8 n( m" R/ m
} - g$ `( W* T& |7 D$ I8 K: P( a2 L; n9 Y3 }( c. @
6 R* L* V; M; r( t0 I
四、重启计算机 ; U q3 g. x0 i9 xtypedef int (CALLBACK *SHUTDOWNDLG)(int); //显示关机对话框函数的指针( l9 b. `9 Z1 |2 H- y% [% F
HINSTANCE hInst = LoadLibrary("shell32.dll"); //装入shell32.dll - P+ ^4 W- C' F9 _5 L0 MSHUTDOWNDLG ShutDownDialog; //指向shell32.dll库中显示关机对话框函数的指针 ( u4 t7 t7 U% X9 g9 q; yif(hInst != NULL) ; T9 z: |: A9 s{ + h' v, F9 _$ \* I//获得函数的地址并调用之 , C( e) x" i) m3 T9 Q3 H% _ShutDownDialog = (SHUTDOWNDLG)GetProcAddress(hInst,(LPSTR)60); 2 l; k* N% [# q+ a(*ShutDownDialog)(0); * P4 g1 y6 g7 B4 y} k) o9 y) {2 J# f. k 8 s" ~; [( I; \( @( B3 n# B/ `: u$ f5 @. X+ b e: b
五、枚举所有字体, j7 b$ Z& @4 }; o7 w+ ]
LOGFONT lf;; S" x: D0 ~& i# u& `
lf.lfCharSet = DEFAULT_CHARSET; // Initialize the LOGFONT structure ! X' D& a5 T8 r3 ^, d. d! i# Qstrcpy(lf.lfFaceName,""); ' m G" H- {) V6 R4 DCClientDC dc (this); 2 h8 N0 a, i% @: k/ v3 _ R! y0 G4 g$ {- a0 a- e
//Enumerate the font families; P) }- ^9 X7 t
::EnumFontFamiliesEx((HDC) dc,&lf, % }2 i# x% b: S' }(FONTENUMPROC) EnumFontFamProc,(LPARAM) this,0);) Q8 n5 p, `$ a' J" b
: T9 X; o- e, p n//枚举函数1 _0 x4 B2 J/ j% ^" t
int CALLBACK EnumFontFamProc(LPENUMLOGFONT lpelf,LPNEWTEXTMETRIC lpntm,DWORD nFontType,long lparam) 1 S2 ^/ P. k* M/ i{ 0 Y0 J! V" \0 S, x1 L// Create a pointer to the dialog window6 x; J4 m$ s! ]9 f( b
CDay7Dlg* pWnd = (CDay7Dlg*) lparam;4 X# N; D9 `( J( R
// add the font name to the list box) m, k0 j6 f2 l4 j y% v
; |& A& ~: Z( j) G5 d5 K! rpWnd ->m_ctlFontList.AddString(lpelf ->elfLogFont.lfFaceName); 8 V9 @ ` \, B : d0 }: {* M+ ~// Return 1 to continue font enumeration6 P+ d$ |/ Q( S- e, @4 D( F
return 1; , O! ^1 ^1 P$ b5 e! ^3 I4 ^) L}8 w% i( j/ G" y. h+ H, c
其中m_ctlFontList是一个列表控件变量 " O" r! m! z, L! y! w8 A # K$ \2 Q2 E0 a& I" z+ Y2 b! i& l0 l5 I1 b; T
六、一次只运行一个程序实例,如果已运行则退出0 C* X6 Q- P9 L# J. j0 k- [4 q
if( FindWindow(NULL,"程序标题")) exit(0);! l9 k: @& Q3 c+ L. X
7 [ b0 [; J* j5 m& p# C
; T& p/ A4 y/ X# N p2 j! ]# d( G
七、得到当前鼠标所在位置 ! ]/ ^' z0 o6 e0 K1 L6 s% [& h. yCPoint pt;' C" O& u* C1 _( E6 |# n
GetCursorPos(&pt); //得到位置 d- J: G j8 Y+ g# f/ y+ _9 C% P2 h
1 Y0 s, p" u; W& F+ ?9 M
5 Q! R1 i- k" _' h( x7 P( D$ E
八、上下文菜单事件触发事件:OnContextMenu事件 8 d8 ^( h* y: ] Y8 W; P8 I5 f * L9 L% }" Y/ ~9 s& A0 K _4 ^3 E Q
九、显示和隐藏程序菜单 8 K. p7 y6 q8 @. t0 L \CWnd *pWnd=AfxGetMainWnd(); + ]7 d& \9 A9 y( d8 l9 y. [
if(b_m) //隐藏菜单! ?+ a; H& [# O: m, }; \- S
{! z; G+ C! U# J* \# V6 `$ r3 @
pWnd->SetMenu(NULL);8 p+ e8 [7 [: e
pWnd->DrawMenuBar();# g, f0 T$ J/ ~( y; N, \
b_m=false; 2 ~* m9 g9 M5 S, R) G! a} 2 S( L. s- e; C5 ]& r; n7 uelse ' \* L) {: P" @: N{ 2 _/ x2 `1 N+ ~" n+ sCMenu menu; * k2 H6 q& |, n" }0 U8 imenu.LoadMenu(IDR_MAINFRAME); ////显示菜单 也可改变菜单项, m- K. L) e% R
pWnd->SetMenu(&menu); ( W8 {( s X! c; z! B# gpWnd->DrawMenuBar();1 E8 E. j- g' E5 S- s" c2 g4 o
b_m=true; / W! v) y' @ j$ G- Bmenu.Detach();9 q5 l; A- Z# o5 Z; y
}: Y" O, H4 c1 g7 t; b6 `! b' s! ^
+ v' B& y3 o$ d
( S0 t) V8 Z& o" O. @' ~8 @" }
十、获取可执行文件的图标7 H8 F! y+ }% F
HICON hIcon=::ExtractIcon(AfxGetInstanceHandle(),_T("NotePad.exe"),0); ! ]0 V6 N- B+ p- _ F: Qif (hIcon &&hIcon!=(HICON)-1) + g9 c" k' V$ a2 q{ " }/ B2 {& \, Y& i m4 IpDC->DrawIcon(10,10,hIcon);; d: \# t' [$ e, @0 Y: ~
}6 |# o- ?( d- {. t
DestroyIcon(hIcon);/ R! k* x" z( ~
十一、窗口自动靠边程序演示 9 u. k2 g/ p5 t0 e! N$ v8 vBOOL AdjustPos(CRect* lpRect)5 a7 _: k- _/ ] v4 e9 L6 |" H
{ ) x( K, k; X& V8 S& n7 s2 B* R' S. m//自动靠边' M$ K9 x$ p% D6 C
int iSX=GetSystemMetrics(SM_CXFULLSCREEN);! a' X: M9 _4 ~: I% B+ X
int iSY=GetSystemMetrics(SM_CYFULLSCREEN);* n! p+ P) b5 N