QQ登录

只需要一步,快速开始

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

[分享] VC技巧集锦

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

1253

主题

443

听众

-516

积分

复兴中华数学头子

  • 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
    9 I( }5 i) W2 s  J: b$ k9 ~mciSendString("Set cdAudio door open wait",NULL,0,NULL);. g' Z2 ~7 N( V! n% c
    8 I) Y6 |% ?- B* {8 K) E

    & C/ u5 N; l* T. I6 y二、关闭CD_ROM
      ]; {# V: I4 O- p* bmciSendString("Set cdAudio door closed wait",NULL,0,NULL);# w, d) `5 ?$ n0 m& C. r& i' H

    8 V) d0 d4 U- W6 \4 s, x9 l) _
      b( C: ]1 w8 W9 ?: T三、关闭计算机' ]8 G; S2 E* |! e2 s$ I
    OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构: \! x" d+ Q- _. Y0 J/ \
    OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);8 m* e' O. U& L( X
    GetVersionEx(&amp;OsVersionInfo); //获取操作系统版本信息, O3 I0 w  `* K2 L" {) m; u
    if(OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)( I+ D5 \' \* ?/ F) z! ]* T1 l
    {6 _  j# `* G4 m
    //Windows98,调用ExitWindowsEx()函数重新启动计算机2 E5 E1 ]9 z7 f7 H
    DWORD dwReserved;# f' @6 d! v7 ?$ A4 E( U# Q
    ExitWindowsEx(EWX_REBOOT,dwReserved); //可以改变第一个参数,实现注销用户、
    " C3 i( f; i: a+ E) O$ A$ ^//关机、关闭电源等操作
    , B- u0 T" X* z( J9 }  C2 Z' O& {0 N
    // 退出前的一些处理程序
    4 j6 ?+ G% P  A- l7 H/ s}2 A1 x, v8 x: W# u# ?
    2 y% S$ h1 a, q: u, R7 g# R
    8 A6 `  N" ]0 }; }, ~) m( `0 e
    四、重启计算机
    7 G" g; H6 U/ n# Vtypedef int (CALLBACK *SHUTDOWNDLG)(int); //显示关机对话框函数的指针
    ( Q2 d! Z! \/ a( V( z* jHINSTANCE hInst = LoadLibrary("shell32.dll"); //装入shell32.dll
    + b) e' I) K1 ?0 T6 ~( W6 KSHUTDOWNDLG ShutDownDialog; //指向shell32.dll库中显示关机对话框函数的指针9 K5 S% U4 I+ O* ^4 }5 Y/ h( P
    if(hInst != NULL)+ A# z% ^( z- q
    {3 @3 Z  K2 P7 ^0 T" ?! d, Z
    //获得函数的地址并调用之
    1 b+ Y6 i' y* e4 e, ^' ZShutDownDialog = (SHUTDOWNDLG)GetProcAddress(hInst,(LPSTR)60);9 {+ p' s5 Y, ?
    (*ShutDownDialog)(0);: |. I# ?2 Q/ t' t. `7 p- }
    }
    1 L! e2 c9 [$ p# n7 j1 k4 ?% g+ l. T; u
    ! Q% r, f% o% d4 k" z
    五、枚举所有字体
    . L$ L" K/ U- jLOGFONT lf;
    8 j* u3 Y: f' }5 Y/ z( ~lf.lfCharSet = DEFAULT_CHARSET; // Initialize the LOGFONT structure
    6 y3 t6 ?/ Q$ e; Cstrcpy(lf.lfFaceName,"");: M3 d8 ?4 a1 K1 r' F) D8 _4 a
    CClientDC dc (this);
    9 L1 U3 c* Q- u6 X. T  _1 A4 _" U8 _) N) ]1 C' }
    //Enumerate the font families
    / y# v' r% e. j5 w5 x::EnumFontFamiliesEx((HDC) dc,&amp;lf,8 {  Z$ l9 i2 p6 I3 _
    (FONTENUMPROC) EnumFontFamProc,(LPARAM) this,0);
    $ S, N: b. O: \9 L" a4 _' z3 ]1 a/ o) ]
    //枚举函数% W9 j: r9 o: Y4 t5 S3 @
    int CALLBACK EnumFontFamProc(LPENUMLOGFONT lpelf,LPNEWTEXTMETRIC lpntm,DWORD nFontType,long lparam)
    ( ]* c$ L( ^. t{
    ( t, U- b; u' Y# v  L// Create a pointer to the dialog window( t6 ~# S1 n+ O
    CDay7Dlg* pWnd = (CDay7Dlg*) lparam;1 I- P3 }+ s: @0 Y/ i. T
    // add the font name to the list box
    % P# @% E# w4 [+ W
    ( C) `. p0 {! `9 z5 _. U7 bpWnd -&gt;m_ctlFontList.AddString(lpelf -&gt;elfLogFont.lfFaceName);
    * S& |) X) d4 P: x4 Z& ^
    # f2 T0 r+ d2 x; [: g; t' h& l* o// Return 1 to continue font enumeration! e" a0 o1 D6 ^# ~* J, I
    return 1;) Y- i$ u% |2 I& q! M  t% f
    }
    $ Q* U; [0 _8 }6 X其中m_ctlFontList是一个列表控件变量
    % m1 g1 a9 ?& m$ n( E& K6 m' c) u5 s7 x

    % I; `5 T5 q9 K  J8 ?) l- o" f3 P六、一次只运行一个程序实例,如果已运行则退出- }9 c" j; u: V( E/ N% ]
    if( FindWindow(NULL,"程序标题")) exit(0);/ Y5 W1 z7 k8 P1 [2 ~# @
    ) M9 n# h3 r; R7 j+ E

    ) f1 ~- G% z; `/ ?% Q+ q七、得到当前鼠标所在位置
    1 E3 `9 K+ _& w% b, x0 N$ t4 ?- yCPoint pt;; }4 M  J  o2 q
    GetCursorPos(&amp;pt); //得到位置* i( Q4 Z1 |7 T6 S. P- A
    1 u( I: i- X0 ^' R4 y% m* R+ J2 O
    ! ^4 {& i* i0 Q8 Y6 q
    八、上下文菜单事件触发事件:OnContextMenu事件
    0 a" I1 z* }6 K! H) `- }+ Z5 c% l1 I) g. d0 v6 \
    . o5 w) ]& }/ \/ r' \' A
    九、显示和隐藏程序菜单* A' v% H* B* j9 K4 g+ ^+ G
    CWnd *pWnd=AfxGetMainWnd(); & b1 x& c- a  B+ G" b  C6 d
    if(b_m) //隐藏菜单
    * X$ W! l5 r* s9 a, h{4 w4 B! ^' c. }: y
    pWnd-&gt;SetMenu(NULL);3 R& U7 e1 \. f, }
    pWnd-&gt;DrawMenuBar();
    7 l1 Y% W+ O( G  x1 i' bb_m=false;% A, m3 U: F: g# C' r4 F
    }
    ) V$ U' a9 \9 Q' m0 W# _else
    8 B6 ^* S) O; S9 a: [/ W" q{
    % U/ ^4 a8 V7 B" N3 lCMenu menu;
    ( ]0 i/ B" d" X- N' K2 hmenu.LoadMenu(IDR_MAINFRAME); ////显示菜单 也可改变菜单项
    + N7 ?: H, I* D: V0 _6 W* I9 e% YpWnd-&gt;SetMenu(&amp;menu);2 j# l3 T! j5 a7 g6 B: L) U6 F
    pWnd-&gt;DrawMenuBar();
    7 m3 n) |6 S# p6 U" m! k; ab_m=true;  G! a/ b) z6 t4 B
    menu.Detach();
    & u+ G2 s0 e& V! `1 I}
    % O: w, e1 R: c: B* T' P$ l' }$ |3 x" H& I2 w% @( Z9 K" X

    # L. F' ?. u* g+ I- u十、获取可执行文件的图标
    - n7 h0 b( A. ?HICON hIcon=::ExtractIcon(AfxGetInstanceHandle(),_T("NotePad.exe"),0);" P% ~4 {/ T9 z' l
    if (hIcon &amp;&amp;hIcon!=(HICON)-1)  J8 u" b: V/ q! f
    {
    - n/ Q; b: [0 M: C' }pDC-&gt;DrawIcon(10,10,hIcon);
    4 A1 c; D2 O0 r( |3 D& s}, f1 e" q/ a1 M, w* {6 [
    DestroyIcon(hIcon);
    9 ~& N6 [  [6 |2 `$ ^8 c  k十一、窗口自动靠边程序演示
    ( O" }; P1 d) p; ]BOOL AdjustPos(CRect* lpRect)
    8 u6 ]" w# A- f$ T, O8 C  i{
    3 Z$ s) K# p+ c6 }8 c$ D3 u//自动靠边& L! n+ l5 C8 k: k6 f' i( s
    int iSX=GetSystemMetrics(SM_CXFULLSCREEN);
    & v! f2 Y7 ]% l4 Iint iSY=GetSystemMetrics(SM_CYFULLSCREEN);- q8 D7 Z' D) Z* P' N2 d6 i
    1 u+ O& e- f  h; g
    RECT rWorkArea;2 E7 r# u$ x. r, |
    BOOL bResult = SystemParametersInfo(SPI_GETWORKAREA, sizeof(RECT), &amp;rWorkArea, 0); 0 R3 S: c) L5 S
    6 q" m: q, E- I- w  e
    CRect rcWA;) J& j* F: Q7 T6 w7 |/ r& U
    if(!bResult)
    / w& N4 ^. n7 R( o0 o{
    ( U3 \. c; d7 G2 u4 ]//如果调用不成功就利用GetSystemMetrics获取屏幕面积
    " |! X; t2 L6 c8 K0 N, M7 BrcWA=CRect(0,0,iSX,iSY);: x3 C! J3 D9 s) [2 C
    }4 V+ Z+ u4 V0 W7 _! k0 _
    else, p- _& |" J; f5 T6 h
    rcWA=rWorkArea;
    ; U9 [! B' \9 O/ X2 b% S0 z, c: o9 u. q. u, s; }4 Q' x
    int iX=lpRect-&gt;left;& R+ v* X0 \+ m6 |7 ?, _7 B
    int iY=lpRect-&gt;top;) s2 p4 J7 L: P- l9 L# X
    if(iX &lt; rcWA.left + DETASTEP &amp;&amp; iX!=rcWA.left)% C- Z$ G5 Q1 Q/ q) x! ~
    {& b3 a6 g/ q3 g+ l4 H4 R9 T
    //调整左& v" S* J. K% \6 ^5 e4 g+ D
    //pWnd-&gt;SetWindowPos(NULL,rcWA.left,iY,0,0,SWP_NOSIZE);
      V: Z% R+ ]( [7 Y# D; O: OlpRect-&gt;OffsetRect(rcWA.left-iX,0);! w& Q2 u: O9 M3 X
    AdjustPos(lpRect);, p+ q; C( h7 v3 b
    return TRUE;/ ]" f$ t9 ?9 x5 W7 M
    }
    1 R* c; e7 G5 E3 i: sif(iY &lt; rcWA.top + DETASTEP &amp;&amp; iY!=rcWA.top)! l, a$ W& o# T" c. L2 K- T
    {
    9 `8 j7 y* w7 z! \2 F//调整上
    1 Q: R3 [, \, j% A* ^  ~. x//pWnd-&gt;SetWindowPos(NULL ,iX,rcWA.top,0,0,SWP_NOSIZE);: F& ]8 t; {( P1 K
    lpRect-&gt;OffsetRect(0,rcWA.top-iY);; A$ _9 l9 N9 [* h* m7 ^
    AdjustPos(lpRect);
    ) q0 B1 [/ W, \6 Breturn TRUE;
    & q+ O! r6 @2 K, d& F$ s}
    ; L+ y5 G/ d) F2 ]! ]2 \if(iX + lpRect-&gt;Width() &gt; rcWA.right - DETASTEP &amp;&amp; iX !=rcWA.right-lpRect-&gt;Width())
    . k" \9 l& P6 o$ f% A. T3 E9 d: }{ . a4 i0 ~3 I, j) v! O4 h; g
    //调整右
    : N8 `* ]. i1 v, X8 D5 N9 W//pWnd-&gt;SetWindowPos(NULL ,rcWA.right-rcW.Width(),iY,0,0,SWP_NOSIZE);
    & t; A. l9 }% R; t, I! @! k4 PlpRect-&gt;OffsetRect(rcWA.right-lpRect-&gt;right,0);
    % U: I( A* V4 k1 GAdjustPos(lpRect);$ `7 m) M; F% _1 q
    return TRUE;
    8 N. G3 i$ R' C  I}
    : j- B/ [* L8 i, e; R( U9 gif(iY + lpRect-&gt;Height() &gt; rcWA.bottom - DETASTEP &amp;&amp; iY !=rcWA.bottom-lpRect-&gt;Height())5 i4 N9 J9 p) @, c/ l5 \
    {
    ( u  G7 m4 A8 }" M; z//调整下: x3 c0 S3 y! t# M
    //pWnd-&gt;SetWindowPos(NULL ,iX,rcWA.bottom-rcW.Height(),0,0,SWP_NOSIZE);
    . H1 n. z* n5 ]0 Z9 B+ G6 tlpRect-&gt;OffsetRect(0,rcWA.bottom-lpRect-&gt;bottom);
    ( U% _& `5 O5 X4 t. M# [return TRUE;. X3 n* F( `4 i/ H
    }4 c, V; x' [1 \3 S" Z
    return FALSE;- a: c- b' i7 H6 L' j2 y
    }
    # U& T" \/ k5 W; f' B//然后在ONMOVEING事件中使用所下过程调用8 o* n, e+ ~! U
    CRect r=*pRect;) ?  x6 U) j' r. t$ v1 H
    AdjustPos(&amp;r);
    ( a+ {/ g8 [3 h, w9 J$ `*pRect=(RECT)r;
    1 N+ }( b2 N; Y4 z" U5 g# G( H( N( ]$ L2 @1 ]3 K7 }3 c6 I
    4 ^) p: t, u3 m  J0 F
    十二、给系统菜单添加一个菜单项& q+ ?7 S6 X/ n  U, F9 f
    给系统菜单添加一个菜单项需要进行下述三个步骤:& y4 L/ U3 y1 y& b- ?% q) k$ W
    首先,使用Resource Symbols对话(在View菜单中选择Resource Symbols...可以显示该对话)定义菜单项ID,该ID应大于
    2 k  A: Q0 Q! T/ s4 z3 |  P# T
    * U0 T+ F9 ~  o0x0F而小于0xF000;
    ' E) z. `; f: s3 Q3 g6 j3 r其次,调用CWnd::GetSystemMenu获取系统菜单的指针并调用CWnd:: Appendmenu将菜单项添加到菜单中。下例给系统菜单添加
    ! @/ r2 a# p$ C. ?9 N5 c$ w; C" }0 v( X& a- O* H
    两个新的菜单项。
    6 }; Q5 I- x) ]+ y) W, nint CMainFrame:: OnCreate (LPCREATESTRUCT lpCreateStruct)* E! y, v) Y, t$ a0 q; \9 F
    {% n- H; Q# F6 ]$ ^
    7 W1 c) B7 i# k# m$ y! ~+ K& E8 P9 _) u
    //Make sure system menu item is in the right range.
    0 x- |4 @1 W7 A% dASSERT(IDM_MYSYSITEM&lt;0xF000);
    9 W, `8 Y( ?# |  {//Get pointer to system menu.; o2 N# p2 B2 V" ?4 P- W- g. g
    CMenu* pSysMenu=GetSystemMenu(FALSE);" ?' Z' [. g5 O6 S) H8 P% |  k4 H
    ASSERT_VALID(pSysMenu);
    , G3 B' E5 {6 Y( q//Add a separator and our menu item to system menu.
    3 Y& ]7 Z3 u1 V/ g, x. `CString StrMenuItem(_T ("New menu item"));4 D4 Z3 r$ L1 f1 d
    pSysMenu-&gt;AppendMenu(MF_SEPARATOR);) K$ h8 |3 ^$ A4 v' V  O
    pSysMenu-&gt;AppendMenu(MF_STRING, IDM_MYSYSITEM, StrMenuItem);
    4 F- F' u  U& `4 @6 w* ^# h4 d& c7 d3 i; P
    }</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

    既然你诚信诚意的推荐了,那我就勉为其难的听听吧!
    , z! v' i/ i. i% _数学中国社区太棒了!) R! y8 L) l2 @! V/ e# Z
    其实我一直觉得楼主的品味不错!呵呵!
      [8 w5 j/ ]2 \数学中国社区 不走平凡路
    回复

    使用道具 举报

    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-9-2 07:44 , Processed in 0.465409 second(s), 98 queries .

    回顶部