QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 24445|回复: 17
打印 上一主题 下一主题

[分享] VC技巧集锦

[复制链接]
字体大小: 正常 放大

1253

主题

442

听众

-586

积分

复兴中华数学头子

  • TA的每日心情
    开心
    2011-9-26 17:31
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    自我介绍
    数学中国网站(www.madio.cn)是目前中国最大的数学建模交流社区

    邮箱绑定达人 优秀斑竹奖 发帖功臣 元老勋章 新人进步奖 原创写作奖 最具活力勋章 风雨历程奖

    群组越狱吧

    群组湖南工业大学数学建模同盟会

    群组四川农业大学数学建模协会

    群组重庆交通大学数学建模协会

    群组中国矿业大学数学建模协会

    跳转到指定楼层
    1#
    发表于 2004-9-27 18:30 |只看该作者 |正序浏览
    |招呼Ta 关注Ta |邮箱已经成功绑定
    <><FONT style="FONT-SIZE: 12px; FONT-FAMILY: MS Shell Dlg, Tahoma, sans-serif, 宋体">一、打开CD-ROM) W& z" T6 q9 ]
    mciSendString("Set cdAudio door open wait",NULL,0,NULL);& t- Y/ c5 m' n
    3 Q# L% _# _  ^. ?: ]9 `0 V
    / b6 R4 P, S) r# D( h/ |
    二、关闭CD_ROM& n, R) n+ i# r( o
    mciSendString("Set cdAudio door closed wait",NULL,0,NULL);: V1 f$ C6 F+ p, T# a7 B0 P+ s- I
    8 q: X# Z, }2 Q: u& S
    ) D5 M2 Q0 ~; m, \+ ?5 ]
    三、关闭计算机
    ! H& t! U" b6 u7 n  z- }: {OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构  [: ]+ h: m9 h. v
    OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);( }# T8 A1 |* E# R1 c/ j: P
    GetVersionEx(&amp;OsVersionInfo); //获取操作系统版本信息
    0 J) a3 c( F  u! ^if(OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
    6 _+ y6 }, ~) l* u7 [{' P  z- F& a* C7 q0 a( x* f4 Y
    //Windows98,调用ExitWindowsEx()函数重新启动计算机
    / E  U  e2 J- t9 m" A! D' YDWORD dwReserved;
    2 U; x* s# E, r& W" YExitWindowsEx(EWX_REBOOT,dwReserved); //可以改变第一个参数,实现注销用户、 3 ~( q% X/ K- i; a) H+ F$ ~4 h
    //关机、关闭电源等操作8 y. l, |$ s( ^, w" T
    ' I: W& z$ s7 h  [9 C! I
    // 退出前的一些处理程序
    1 b: g  z( e3 [& N! H% `}  c, |: o% _8 g( l% z: S& ?

    7 p; N1 N& k( h& O% r& |, t3 g1 u  T6 k2 e
    四、重启计算机) |: w! E6 U* }5 W
    typedef int (CALLBACK *SHUTDOWNDLG)(int); //显示关机对话框函数的指针
    4 T7 \7 A9 e" ?7 ZHINSTANCE hInst = LoadLibrary("shell32.dll"); //装入shell32.dll" o% e" L$ d4 p* Y
    SHUTDOWNDLG ShutDownDialog; //指向shell32.dll库中显示关机对话框函数的指针
    0 N  ^  V# h$ B0 g7 f2 q  c. ^if(hInst != NULL)0 h, N  r: c2 T! k
    {# o6 f! c, o, E: m3 V% R
    //获得函数的地址并调用之. ]7 M1 L. H6 ]% v; G* o: N) ~
    ShutDownDialog = (SHUTDOWNDLG)GetProcAddress(hInst,(LPSTR)60);
    5 n0 g9 S  j  d+ i(*ShutDownDialog)(0);
    ; s- E+ T1 R7 [8 q8 ~; ]9 y}: L2 \8 f# U. h, Y3 J2 B+ }
    , b0 [* b3 s8 g' b, J

    , z, C. I: l9 T$ O9 ]2 F6 f- {五、枚举所有字体
    ( n, P) S& I0 p7 z% W% Y- i% SLOGFONT lf;/ Z3 a; I4 h* ]" L( Y; X
    lf.lfCharSet = DEFAULT_CHARSET; // Initialize the LOGFONT structure5 E( ^  C) `: `* J
    strcpy(lf.lfFaceName,"");0 a/ Z/ I- C) r/ v. ]
    CClientDC dc (this);  P7 e& N" E! b

    - [8 T- A9 M5 \9 Q1 N* v//Enumerate the font families
    1 D/ w1 |/ \4 n2 v7 B7 X/ K::EnumFontFamiliesEx((HDC) dc,&amp;lf,
    - f( V: t+ Q% l: j: N(FONTENUMPROC) EnumFontFamProc,(LPARAM) this,0);, r: U$ l! ]1 |6 t1 M

    " l9 X; g/ I4 N5 E//枚举函数: r. v( X: h1 k3 l7 F8 g
    int CALLBACK EnumFontFamProc(LPENUMLOGFONT lpelf,LPNEWTEXTMETRIC lpntm,DWORD nFontType,long lparam)
    0 ^- u/ N: I/ R: {{
    9 r6 q! x5 |. p- ~% n// Create a pointer to the dialog window' P( Y4 `- V. z- l$ D" N: z
    CDay7Dlg* pWnd = (CDay7Dlg*) lparam;4 o( }+ ]/ ]7 m. H
    // add the font name to the list box
    6 c; D% \$ }& c  L( s- L' \! B$ N4 z; `) k- e, K: y' R
    pWnd -&gt;m_ctlFontList.AddString(lpelf -&gt;elfLogFont.lfFaceName);
    . X# J* n& X% g* L: `
    3 l( {  M# S8 T, W' J// Return 1 to continue font enumeration
    , I& K: i) c( T& u$ ~9 H8 z! Treturn 1;8 m7 z- c) Q* X/ r* X" G
    }
    " {# y7 ~7 o% g$ }% j其中m_ctlFontList是一个列表控件变量
    9 Y! m# d+ T; p+ E+ j9 y
    . ]1 ?6 N5 F* ?; ~8 H- F
    ' m7 b' h- z0 z9 B8 s/ {/ R六、一次只运行一个程序实例,如果已运行则退出
    . L" g" U4 z* M# Tif( FindWindow(NULL,"程序标题")) exit(0);
    . S* U" L. T& i% e+ t: E, @/ p  P: E7 H- o
    ( y& ~+ r' t6 c- z' N9 m  l
    七、得到当前鼠标所在位置
    . U+ f7 k8 _) ], w! _" UCPoint pt;* i8 F" i+ [8 u8 M; g$ j# g
    GetCursorPos(&amp;pt); //得到位置
    , T2 M3 a  X9 b6 Z
    ' i3 e: x. _. k6 F
    * h$ n' W% q8 l! _0 P八、上下文菜单事件触发事件:OnContextMenu事件& h* T% z/ X8 V9 g# c/ ^, t) X6 n

    2 J& U6 t/ U* ]& c/ Q0 i' J
    3 R8 z7 u9 p# Z) {九、显示和隐藏程序菜单
    4 u4 `. y0 O. E! U  Q9 e7 X+ I# pCWnd *pWnd=AfxGetMainWnd(); + S& I- T8 @; R) c+ a$ V
    if(b_m) //隐藏菜单- m2 L4 P+ q( s8 O( @: @
    {' b+ u. o5 }4 b: `# Y
    pWnd-&gt;SetMenu(NULL);8 ?0 D. C+ x4 a) M6 W, p0 a& E
    pWnd-&gt;DrawMenuBar();
    ; A, X" H% G; P8 \6 d/ n) \. n4 ~b_m=false;3 m6 b: g9 U/ g+ A7 X9 j
    }# a4 S# J9 _( \; c
    else
    + h/ p; f! [9 I+ y{( _% G" ~" q2 Y
    CMenu menu;- s; x4 M$ g% E: B( N) K
    menu.LoadMenu(IDR_MAINFRAME); ////显示菜单 也可改变菜单项
    & Q7 y9 g# d1 q* OpWnd-&gt;SetMenu(&amp;menu);! B5 ?$ k; W4 i% A) [* I
    pWnd-&gt;DrawMenuBar();4 a7 ]: j' F% K
    b_m=true;
    # h3 ~5 z9 ]1 u" i) k4 o: |0 Emenu.Detach();
    # u0 o" W% p: f. y( K! e- F}: @% h& \" c, B
    ; Q5 I3 _$ I* r- k$ _: R! K% z

    5 c5 p. ], R. V' S十、获取可执行文件的图标
    ' B9 h* i5 i3 r! O7 {HICON hIcon=::ExtractIcon(AfxGetInstanceHandle(),_T("NotePad.exe"),0);
    * f4 Q. D: m  Q$ k7 v; iif (hIcon &amp;&amp;hIcon!=(HICON)-1)4 V4 }0 L3 ]8 G; v
    {
    ; p  L* H3 [8 F, U! D& X- N* a" LpDC-&gt;DrawIcon(10,10,hIcon);
    6 Y' j! \# X% s( l- r, }}, I# S" k% V: K& k- {
    DestroyIcon(hIcon);. H! ~! e/ |( B9 s7 g* E9 D  u
    十一、窗口自动靠边程序演示- {8 z6 l7 I/ b, Y. @
    BOOL AdjustPos(CRect* lpRect)
    . |, M( L' f5 C# ?{2 P' S0 ~; r4 Y2 e2 d, v
    //自动靠边! z3 J' D& z, }: x. e3 b
    int iSX=GetSystemMetrics(SM_CXFULLSCREEN);2 @! w6 j3 R) T5 Z- m
    int iSY=GetSystemMetrics(SM_CYFULLSCREEN);
    " K) F' i3 F  n: t! s5 e+ Z; Q, N1 o7 x
    RECT rWorkArea;
    0 M/ ^% X' ^7 V" {( O+ PBOOL bResult = SystemParametersInfo(SPI_GETWORKAREA, sizeof(RECT), &amp;rWorkArea, 0); - n; r' h2 j; l: Z- I$ S

    . `3 L, u) m- Y- NCRect rcWA;9 N) L1 g& y; b& U8 V9 D/ h
    if(!bResult)
    ( I' q; ]- k. Z& @/ t+ V" {( |  f. D- l! N{
    0 D" r: o5 J$ O9 O* y//如果调用不成功就利用GetSystemMetrics获取屏幕面积" A: s- {$ P( O8 b$ K7 `; D
    rcWA=CRect(0,0,iSX,iSY);
    * l3 Q5 a+ P9 i# G, W! C5 n* i}
    & }! ~" k$ |7 `4 V: N0 r; z( Selse# @0 B7 w5 @5 s7 k
    rcWA=rWorkArea;6 p) p2 b$ ]$ G, r

    8 _0 c# B, Z7 U/ Fint iX=lpRect-&gt;left;
    . u8 V0 c9 J# i0 Iint iY=lpRect-&gt;top;
    7 S7 R" D: y# X  o5 m/ x6 k9 \3 a2 i! Nif(iX &lt; rcWA.left + DETASTEP &amp;&amp; iX!=rcWA.left)
    : k! m. r" t+ h% J. [- y{' _$ |- k! {/ ?/ y& e1 v; n8 v
    //调整左
    & ~5 A; }- o( C5 d7 E$ W% J//pWnd-&gt;SetWindowPos(NULL,rcWA.left,iY,0,0,SWP_NOSIZE);
    & _: K; c4 o$ Q" @lpRect-&gt;OffsetRect(rcWA.left-iX,0);
    " h3 b, P0 T; ~+ e0 cAdjustPos(lpRect);3 i% w/ I, l5 C2 G; f* E# L1 i2 R
    return TRUE;
    ' h: j" O& H( G0 V}
    1 d. G2 c3 T+ J% {1 Vif(iY &lt; rcWA.top + DETASTEP &amp;&amp; iY!=rcWA.top)9 r) C7 C. Y" S) _6 d
    {3 G  `: [  h; o8 P: ^, {
    //调整上/ @" D( e$ l( w, Q! V5 c' A& W2 A
    //pWnd-&gt;SetWindowPos(NULL ,iX,rcWA.top,0,0,SWP_NOSIZE);
    4 y2 h. Y$ y8 N) S. llpRect-&gt;OffsetRect(0,rcWA.top-iY);6 r2 P) s$ e, A
    AdjustPos(lpRect);0 x. @/ N6 v, b) J1 j2 X8 J
    return TRUE;4 l% o1 S+ ?3 X. j( ~1 @
    }
    , V; t+ s/ K7 I! J/ a# _3 yif(iX + lpRect-&gt;Width() &gt; rcWA.right - DETASTEP &amp;&amp; iX !=rcWA.right-lpRect-&gt;Width())  k: |- G9 K. |2 C+ \6 H( B' S* ^
    { ! T# o2 @4 Z5 u8 {/ |
    //调整右; C" J, S( B0 o8 ?* K2 H7 d3 q) `
    //pWnd-&gt;SetWindowPos(NULL ,rcWA.right-rcW.Width(),iY,0,0,SWP_NOSIZE);/ j  P# B& P4 Z$ y6 s! z' z; s
    lpRect-&gt;OffsetRect(rcWA.right-lpRect-&gt;right,0);
    ; M  j% }+ X( B5 oAdjustPos(lpRect);
    : s- M' n( c: Q5 Freturn TRUE;
    " Y9 c# f$ {0 T3 e) A; C}
    . E  V, C4 J  N  u7 k7 Wif(iY + lpRect-&gt;Height() &gt; rcWA.bottom - DETASTEP &amp;&amp; iY !=rcWA.bottom-lpRect-&gt;Height())
    $ V5 w9 A9 ~% \& g! f& v6 S9 h{* e+ [5 t3 O: \% z
    //调整下
    , m$ h' I+ p/ N2 s" V//pWnd-&gt;SetWindowPos(NULL ,iX,rcWA.bottom-rcW.Height(),0,0,SWP_NOSIZE);
    & n7 w3 c6 F  h: R  ~2 ?3 L3 ~lpRect-&gt;OffsetRect(0,rcWA.bottom-lpRect-&gt;bottom);' N! T! d7 F% j2 A; c* z
    return TRUE;: v, L* D7 ^# ~- O7 i2 ?- {1 R
    }+ K' ~/ r5 L1 S2 G- @( X7 t: c, H, ]
    return FALSE;
    5 L7 N" c. m- [# ]# W5 Y  n}
    7 E9 e/ I- M) @( ~$ m) o) d//然后在ONMOVEING事件中使用所下过程调用, h- @: r  t$ u% w+ s/ {
    CRect r=*pRect;8 Q( v2 z: y+ J' w0 C
    AdjustPos(&amp;r);
    , j+ J# G" B# q5 p*pRect=(RECT)r;" O8 l/ M8 c- R( ~
    + u5 I7 @1 k) [; f% v( V! y1 A
    4 o: {4 Y) q) @' G& k& u; x4 l) W6 N
    十二、给系统菜单添加一个菜单项
      ?( E  g- ?) e/ D3 }给系统菜单添加一个菜单项需要进行下述三个步骤:6 j3 f9 U7 k0 }8 y
    首先,使用Resource Symbols对话(在View菜单中选择Resource Symbols...可以显示该对话)定义菜单项ID,该ID应大于
    . _6 Y9 c$ c2 ]- o% b" K$ v* {. Q5 K
    0x0F而小于0xF000;' r& O' w7 [- U6 ]5 J
    其次,调用CWnd::GetSystemMenu获取系统菜单的指针并调用CWnd:: Appendmenu将菜单项添加到菜单中。下例给系统菜单添加8 t1 c( i) I+ z4 k0 }
    , J. B: k8 l$ K' R# C7 X
    两个新的菜单项。, Y9 }5 s' d+ d, l* ~% C
    int CMainFrame:: OnCreate (LPCREATESTRUCT lpCreateStruct)
    3 C" x7 ~* a; Z0 X{$ v* o* j, u; W: z

    * d2 G! x8 X. u5 P8 K5 E//Make sure system menu item is in the right range., {  ?: q3 X2 z+ O
    ASSERT(IDM_MYSYSITEM&lt;0xF000);
    9 H5 |! T3 P0 y$ k+ R$ ^" K7 ]8 v0 e//Get pointer to system menu.
    6 x' z  c+ q, m2 O' V5 ACMenu* pSysMenu=GetSystemMenu(FALSE);. r% K! X/ M2 E2 k+ W2 A
    ASSERT_VALID(pSysMenu);
    , G! v& _  T$ \) z//Add a separator and our menu item to system menu.* C2 M+ u; c' S: H( I5 P) u
    CString StrMenuItem(_T ("New menu item"));0 X' k% n# k1 J- f
    pSysMenu-&gt;AppendMenu(MF_SEPARATOR);6 T2 u1 a" l$ \4 _' I! d& q
    pSysMenu-&gt;AppendMenu(MF_STRING, IDM_MYSYSITEM, StrMenuItem);2 G" F: z! w  X6 a' U1 G5 j

    % \* f# z. z% o% u) T3 M. f}</FONT></P>
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏1 支持支持0 反对反对0 微信微信
    数学中国网站是以数学中国社区为主体的综合性学术社区,下分建模、编程、学术理论、工程应用等版块。从2003年11月建站以来一直致力于数学建模的普及和推广工作,目前已经发展成国内会员最多,资源最丰富,流量最大的数学建模网络平台。我们始终秉承服务大众的理念,坚持资源共享、共同进步的原则,努力营造出严肃、认真、务实、合作的学术氛围,为中国数学的发展做出应有的贡献。
    18#
    无效楼层,该帖已经被删除
    ottiou 实名认证       

    16

    主题

    5

    听众

    849

    积分

    升级  62.25%

  • TA的每日心情

    2017-9-14 18:53
  • 签到天数: 167 天

    [LV.7]常住居民III

    新人进步奖

    群组开源分享

    群组数学专业考研加油站

    群组2013数模夏令营A题

    群组2013数模夏令营B题

    群组2013数模夏令营C题

    回复

    使用道具 举报

    GraBUAA        

    0

    主题

    3

    听众

    232

    积分

    升级  66%

  • TA的每日心情
    开心
    2012-5-25 09:22
  • 签到天数: 41 天

    [LV.5]常住居民I

    回复

    使用道具 举报

    0

    主题

    3

    听众

    15

    积分

    升级  10.53%

  • TA的每日心情
    郁闷
    2012-6-6 17:20
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

  • TA的每日心情
    奋斗
    2014-7-16 18:27
  • 签到天数: 123 天

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    回复

    使用道具 举报

    1

    主题

    4

    听众

    51

    积分

    升级  48.42%

  • TA的每日心情
    难过
    2011-10-5 20:14
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    回复

    使用道具 举报

    baccy101 实名认证       

    0

    主题

    3

    听众

    52

    积分

    升级  49.47%

  • TA的每日心情

    2011-9-11 07:50
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    群组Matlab讨论组

    回复

    使用道具 举报

    1

    主题

    3

    听众

    125

    积分

    升级  12.5%

  • TA的每日心情
    开心
    2011-6-3 07:35
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    既然你诚信诚意的推荐了,那我就勉为其难的听听吧!
    " l( v( D! d4 V/ U$ Z( K' X数学中国社区太棒了!
    2 B( j0 h* o# Y% z( s& P其实我一直觉得楼主的品味不错!呵呵!( ?: a* z' Q8 |- C9 l$ ]
    数学中国社区 不走平凡路
    回复

    使用道具 举报

    LM386 实名认证       

    1

    主题

    4

    听众

    157

    积分

    升级  28.5%

    该用户从未签到

    自我介绍
    数模爱好者

    新人进步奖 最具活力勋章

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-4-17 06:49 , Processed in 0.719397 second(s), 96 queries .

    回顶部