- 在线时间
- 63 小时
- 最后登录
- 2019-5-3
- 注册时间
- 2004-5-10
- 听众数
- 442
- 收听数
- 0
- 能力
- -250 分
- 体力
- 10122 点
- 威望
- -12 点
- 阅读权限
- 150
- 积分
- -516
- 相册
- 6
- 日志
- 10
- 记录
- 10
- 帖子
- 2003
- 主题
- 1253
- 精华
- 43
- 分享
- 8
- 好友
- 1292

复兴中华数学头子
TA的每日心情 | 开心 2011-9-26 17:31 |
|---|
签到天数: 3 天 [LV.2]偶尔看看I
- 自我介绍
- 数学中国网站(www.madio.cn)是目前中国最大的数学建模交流社区
 群组: 越狱吧 群组: 湖南工业大学数学建模同盟会 群组: 四川农业大学数学建模协会 群组: 重庆交通大学数学建模协会 群组: 中国矿业大学数学建模协会 |
< ><FONT style="FONT-SIZE: 12px; FONT-FAMILY: MS Shell Dlg, Tahoma, sans-serif, 宋体">一、打开CD-ROM
% I) ^4 m" f" O$ d6 ?mciSendString("Set cdAudio door open wait",NULL,0,NULL);
4 v' |9 M% J/ t3 H2 v- s- d" t; R2 E$ x2 z* a9 s j7 ]
- X, k, ]* f" P! w6 R! U
二、关闭CD_ROM
( H% k, E6 t! U0 {! B8 ImciSendString("Set cdAudio door closed wait",NULL,0,NULL);
' n) o# `5 H6 r. D0 B% m; {! e w6 t: a! \
: I$ z1 K- W2 J; R( a
三、关闭计算机$ i- S+ Z# E: k$ K
OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构0 r3 v$ ?8 Q. f- \
OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);7 k) e! K$ Z: F3 V2 D, V9 H+ P9 s
GetVersionEx(&OsVersionInfo); //获取操作系统版本信息
- [+ r2 H# P: s% t fif(OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) d) R) t, ^- t) F) m
{2 e% J o* e! S7 p4 N2 m
//Windows98,调用ExitWindowsEx()函数重新启动计算机
, K* l! c+ f0 Z' c4 n; mDWORD dwReserved;, i t" d/ }4 y
ExitWindowsEx(EWX_REBOOT,dwReserved); //可以改变第一个参数,实现注销用户、 - J8 A, C5 P0 s/ ?4 b( w
//关机、关闭电源等操作0 s" S& ]2 C. l( r6 t3 R9 K/ I
7 ^4 @1 g- C, H4 ^* T* r// 退出前的一些处理程序! v. x* m& t8 O0 }- _3 J4 {
}: d+ I* Q2 P+ J" A7 Z [
% O- o& R C1 m ?; e
7 F" Q! R) o9 a K+ w4 E+ o四、重启计算机/ y& l9 r" @( F( s) y7 t: g
typedef int (CALLBACK *SHUTDOWNDLG)(int); //显示关机对话框函数的指针: Q- O% L* _' J4 S+ G
HINSTANCE hInst = LoadLibrary("shell32.dll"); //装入shell32.dll
: ?6 E5 r7 u5 ^1 Z' B! e8 o* ySHUTDOWNDLG ShutDownDialog; //指向shell32.dll库中显示关机对话框函数的指针
4 F, K* @+ O" rif(hInst != NULL)
& s$ U# @( E, X( a3 f' j; W' W{
: t: |- w" C6 E' f: e! I//获得函数的地址并调用之2 I3 ]6 N) R. V7 Q6 l# O( ]
ShutDownDialog = (SHUTDOWNDLG)GetProcAddress(hInst,(LPSTR)60);
$ [+ J& x# c/ A; e4 [(*ShutDownDialog)(0);
+ ^9 D- h! E* g- Q0 g- Z _}% K" p8 r$ M9 V4 D" ^8 P
+ u, t, |+ {3 _3 j: g# B' n2 r9 c1 @8 \+ g0 V0 A6 e
五、枚举所有字体9 p; G T+ O, R# |& P( [) L/ e/ {
LOGFONT lf;6 r% n$ L% h& }* e
lf.lfCharSet = DEFAULT_CHARSET; // Initialize the LOGFONT structure8 o$ ^ b! S7 ]; Y
strcpy(lf.lfFaceName,"");1 l# H8 |$ h' _! F& I
CClientDC dc (this);
8 T) R8 s% s/ _: r' ^0 D# ~/ s& I" N4 A7 y' B/ F
//Enumerate the font families* O0 Y: h8 l8 x& b; V
::EnumFontFamiliesEx((HDC) dc,&lf,
/ Z: ?, W5 r' N, a(FONTENUMPROC) EnumFontFamProc,(LPARAM) this,0);' L3 V0 Q; n z
4 z U: R5 I1 I3 A+ L, B//枚举函数
% H& N8 U5 s+ ]6 c3 R v. Aint CALLBACK EnumFontFamProc(LPENUMLOGFONT lpelf,LPNEWTEXTMETRIC lpntm,DWORD nFontType,long lparam)
4 _2 ]5 m- I. I( B; m{
% X. s! u* ^; Y" U( y/ q: s// Create a pointer to the dialog window
6 H# O- O4 }1 ?) T! b/ wCDay7Dlg* pWnd = (CDay7Dlg*) lparam;
8 E. O1 ^4 [( b7 D1 n// add the font name to the list box
6 Y/ |6 U I0 _3 Z. M. n" S3 E" V
# w& [% b' L+ H6 PpWnd ->m_ctlFontList.AddString(lpelf ->elfLogFont.lfFaceName);
$ N& s0 L/ e; ^9 e( N# w: x
8 u" h3 _! f; r# U9 }// Return 1 to continue font enumeration4 j. B2 [1 D# A
return 1;! J! g" s4 |* r3 v w( ]7 M. m/ W' @
}
* `/ S4 Y) W+ M7 J$ p1 p8 a其中m_ctlFontList是一个列表控件变量
2 p8 m k, ?& B* Q6 J9 W% n$ p% ?% a
% v: ^: Y# p: k: l# ~( d
六、一次只运行一个程序实例,如果已运行则退出
$ U3 m/ S! j+ Y5 t- U/ uif( FindWindow(NULL,"程序标题")) exit(0);
% S8 [- O8 }; u% B7 o, f
5 Y! t+ k* v- a, P6 l9 i
8 n- t1 B) D7 ?) Z& F+ M* V2 K七、得到当前鼠标所在位置
1 |+ [. N' B! E; O, }. Y) ]CPoint pt;
: ^- j' c( ^* g% w5 U1 S0 H( Z- ?GetCursorPos(&pt); //得到位置$ L7 A) K$ h9 L2 @9 Z6 [6 M* s
* D Y8 y Z3 G% E& |8 ]
/ z# J" T* b8 {八、上下文菜单事件触发事件:OnContextMenu事件
; f0 q+ o1 m: p3 \9 k4 K( x
* X* w. C+ s: P
$ t* j: [" ~& S) P, b九、显示和隐藏程序菜单6 l _4 R" [6 ~) v( W, a& {/ p
CWnd *pWnd=AfxGetMainWnd();
3 w8 V+ k$ ^- b2 P- sif(b_m) //隐藏菜单1 [) ^0 T5 |+ F5 X; ]
{: _7 K! Q/ \! s
pWnd->SetMenu(NULL);
% n5 B/ ^* Q2 j& z; ~# r8 UpWnd->DrawMenuBar();
9 N+ E/ l n0 @& T* [: [; r# cb_m=false;
/ {3 p- m1 X! f" U# d0 i}; ^6 ~4 p8 Q3 Q; y
else5 O6 W& y) A: _& m# m
{
0 V5 J* y) d R7 a, W: a" F; GCMenu menu;- Z* z1 {2 N2 G/ j& ~+ T
menu.LoadMenu(IDR_MAINFRAME); ////显示菜单 也可改变菜单项
4 k6 g3 [$ d. c4 o/ m* N, b: d. u9 qpWnd->SetMenu(&menu);
: Y+ M8 Z& k+ t. H5 |pWnd->DrawMenuBar();2 i& D" v- _, i+ U3 j9 [
b_m=true;& L- s# R* ]' H+ z# U, \1 w8 r
menu.Detach();
w o9 `9 `# B2 `}
0 } u9 J6 b- b! H! H' [
3 `4 U6 F( r6 ?5 a5 F2 ?# U4 u3 G) B8 m9 T
十、获取可执行文件的图标
7 s/ N2 T6 s- I9 H3 w* tHICON hIcon=::ExtractIcon(AfxGetInstanceHandle(),_T("NotePad.exe"),0);
. b1 @- z% O# y% N0 Z6 N- b0 k3 `7 Yif (hIcon &&hIcon!=(HICON)-1)" n* J' l7 r$ P0 P7 `6 l% }
{- I7 m6 q; D/ b0 R
pDC->DrawIcon(10,10,hIcon);
8 [5 r( T1 a3 B! v0 }: ?}
' _# w; r9 h9 B ADestroyIcon(hIcon);6 R, L2 E* x$ L) M. _5 J6 H
十一、窗口自动靠边程序演示
- w5 r1 G3 Z! |& T( M- C9 hBOOL AdjustPos(CRect* lpRect)7 [8 p: m+ r! I5 }) K& u; E
{8 T; w& \% E) d9 p7 T
//自动靠边
6 o0 |$ q' _+ k% p. G) Kint iSX=GetSystemMetrics(SM_CXFULLSCREEN);. o) [9 l+ }/ _0 e }
int iSY=GetSystemMetrics(SM_CYFULLSCREEN);
; }/ a3 t8 V0 z; [- K1 q, O
6 Y/ B1 ?% ~5 R9 eRECT rWorkArea;6 c$ v5 s% q8 t- K' M
BOOL bResult = SystemParametersInfo(SPI_GETWORKAREA, sizeof(RECT), &rWorkArea, 0); 6 T2 M4 i! a* N6 e$ n
2 q! d1 J1 i1 S# o7 YCRect rcWA;) q8 P- t+ r* R
if(!bResult)
% i" ~7 V8 U6 {4 L+ j8 g8 t5 b$ [{
) B# S* X7 ]0 R) f4 M8 f/ K//如果调用不成功就利用GetSystemMetrics获取屏幕面积
- l4 f z7 Z) x {rcWA=CRect(0,0,iSX,iSY);
& a" h8 \1 o* R% w0 J1 v! L( F}% H* i3 K% U6 N+ W. k' Z
else
) A; A* ]9 g7 H3 e6 A( M8 h0 brcWA=rWorkArea;7 h0 I; f1 h/ {. F7 Y5 l/ H
9 J( z2 q! z% m, }, ~1 X( wint iX=lpRect->left;
# ?4 K' {! C3 Y9 Rint iY=lpRect->top;! C) M6 [2 [, `# ~" o+ b
if(iX < rcWA.left + DETASTEP && iX!=rcWA.left)( M0 X; P' n" p% b( I
{
6 A8 p( F! y l/ ]//调整左. l/ V$ |3 E0 E
//pWnd->SetWindowPos(NULL,rcWA.left,iY,0,0,SWP_NOSIZE);
+ K, [/ `( U- `1 p) A0 ilpRect->OffsetRect(rcWA.left-iX,0);
; g0 f- S4 r3 E A1 M& O- MAdjustPos(lpRect);
6 L) h' M% i4 D- n6 b) [; F2 nreturn TRUE;+ F0 y. G5 Y: U- F: I% [- L" T" t
}: e& q8 g8 D; a' a m
if(iY < rcWA.top + DETASTEP && iY!=rcWA.top)
; C; F2 g, z1 ?' ^{
I; Z3 c& M6 G9 K+ K" {//调整上, Y" X" d2 y4 y8 G* ` x' r
//pWnd->SetWindowPos(NULL ,iX,rcWA.top,0,0,SWP_NOSIZE);
2 d3 V, \- c- _" e) ]7 BlpRect->OffsetRect(0,rcWA.top-iY);% y! J3 Y H- V4 K2 s$ S4 \
AdjustPos(lpRect);( o' E, p6 t r) v9 u. S
return TRUE;
: q# ^% }# v4 m# q( H! Z+ s8 U+ E}# P( N0 l( O' \7 r% s- m
if(iX + lpRect->Width() > rcWA.right - DETASTEP && iX !=rcWA.right-lpRect->Width())
- B" |9 [/ ]3 O+ W" i- E{
. S/ Y" J7 x5 X E//调整右
, P' W6 y! n7 B8 ~//pWnd->SetWindowPos(NULL ,rcWA.right-rcW.Width(),iY,0,0,SWP_NOSIZE);
6 c$ Y6 ~% a1 glpRect->OffsetRect(rcWA.right-lpRect->right,0);& ^9 `5 L; V$ A$ [6 M$ u
AdjustPos(lpRect);
8 @+ _$ O% F* P E. Oreturn TRUE;
7 Z. T* h( M9 C}* q0 {: \" X) x# T# X
if(iY + lpRect->Height() > rcWA.bottom - DETASTEP && iY !=rcWA.bottom-lpRect->Height())2 n" s4 [. B) \9 R# m' @
{
: I3 D: V& Z* P//调整下/ m+ r3 _4 C/ g% D! `7 W; f) \
//pWnd->SetWindowPos(NULL ,iX,rcWA.bottom-rcW.Height(),0,0,SWP_NOSIZE);
* r c: A6 [1 J4 WlpRect->OffsetRect(0,rcWA.bottom-lpRect->bottom);
/ r" V. N2 q# breturn TRUE;. g& }- s: p6 \( q$ |# G3 t7 A& O( b
}) v1 ^9 D' Z' W
return FALSE;. i/ j, B4 D3 e
}% d# u& D- W" d5 }8 _% x) r
//然后在ONMOVEING事件中使用所下过程调用
% l/ p; ^$ r" e6 X2 B) w, ?CRect r=*pRect;
$ K4 _: U7 y0 k2 P& O, wAdjustPos(&r); T) W2 _* Z% N2 @& f0 I! ^9 @
*pRect=(RECT)r;2 ]% b9 f: \" v& R q
) X" g7 h+ Q7 {! d! ^* z* D
. m/ v8 r( s, B, u- a; |% x K
十二、给系统菜单添加一个菜单项
7 H) w4 r! C* R4 N给系统菜单添加一个菜单项需要进行下述三个步骤:! G3 K- K# w4 L' ^2 [' t6 [
首先,使用Resource Symbols对话(在View菜单中选择Resource Symbols...可以显示该对话)定义菜单项ID,该ID应大于
- ~3 U2 s# c0 I$ D' @2 o/ J+ `2 G0 t4 H
0x0F而小于0xF000;' [- Q; o u0 C/ ^* ~' F- Q
其次,调用CWnd::GetSystemMenu获取系统菜单的指针并调用CWnd:: Appendmenu将菜单项添加到菜单中。下例给系统菜单添加
) b* U1 I4 c! k' U9 V) C+ O( {+ ?0 B/ T* |
两个新的菜单项。
0 H: K3 b4 d- w; Q2 f& wint CMainFrame:: OnCreate (LPCREATESTRUCT lpCreateStruct)
_1 _3 H3 F0 A- w{! h; L& v& a+ l/ o6 i# P; H7 A
…
5 E. P5 l. s: \$ K$ b//Make sure system menu item is in the right range.2 V2 b3 Z& \, e2 u+ w3 Y, @
ASSERT(IDM_MYSYSITEM<0xF000);+ i' e( z) c8 a$ |6 ~: @" p
//Get pointer to system menu.2 i& ^9 m: Y% ~9 Q, f- c
CMenu* pSysMenu=GetSystemMenu(FALSE);
$ w8 E7 z' i$ Z: T6 CASSERT_VALID(pSysMenu);
8 P' x, @; g! R) T& \- V9 R% h% V//Add a separator and our menu item to system menu.
/ {: {9 h8 W4 J$ x9 f% G% C) iCString StrMenuItem(_T ("New menu item"));6 v, y* M+ Z1 g) z
pSysMenu->AppendMenu(MF_SEPARATOR);
$ \- e! T" L6 i* w. x! c7 qpSysMenu->AppendMenu(MF_STRING, IDM_MYSYSITEM, StrMenuItem);
, S+ z" V5 \7 Z6 K# o: y…: r& h$ l; L6 }; Y
}</FONT></P> |
zan
|