QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 23867|回复: 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
    5 T5 X  t4 K! i, P, O$ T0 KmciSendString("Set cdAudio door open wait",NULL,0,NULL);
    1 H9 y: E7 ~0 c$ f, @& U& Y' L9 Q4 r7 ^, \( x  W

    1 Z- @" W/ n8 O! E. O! d二、关闭CD_ROM$ |- R0 f. k; _
    mciSendString("Set cdAudio door closed wait",NULL,0,NULL);
    & p( r. P6 {7 c6 G. k( m: r+ y$ _- x2 r% u3 X
    % ?# j, z1 p7 G5 h8 }- \
    三、关闭计算机7 i6 H, d  u; i" C# K# |. N
    OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构9 y! E1 ], t0 e+ _9 `
    OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
    & X* V+ y  Y% O( ?3 J' L- WGetVersionEx(&amp;OsVersionInfo); //获取操作系统版本信息
    ( B, r/ i/ l6 w* W7 ~3 qif(OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
    . l5 Q7 B  ]( L: Z6 G8 F/ d{/ m/ i7 X8 a5 h7 `" H$ \
    //Windows98,调用ExitWindowsEx()函数重新启动计算机; R4 Q$ M+ K. ~7 Q  N1 t* B5 q6 X
    DWORD dwReserved;
    3 G$ @5 v6 o; U$ Y: K/ F( q* \ExitWindowsEx(EWX_REBOOT,dwReserved); //可以改变第一个参数,实现注销用户、 6 z3 F: q0 J- L9 q, s
    //关机、关闭电源等操作0 w( ?1 F- g; x3 Z) ]

    ; U+ p4 m4 X; q  C, V: o9 D  R5 G// 退出前的一些处理程序3 y' `# _& U5 K2 s! j: V
    }5 A, O. ~* V" I% B
    : ^' v+ N8 ]4 M. f6 v) y- r/ p

    : B3 Z+ T) F- m; Q四、重启计算机
    ! E- ~# U% [0 Z" j9 i, S3 btypedef int (CALLBACK *SHUTDOWNDLG)(int); //显示关机对话框函数的指针
    & \+ G5 l; J, Y6 [  w: b" T: DHINSTANCE hInst = LoadLibrary("shell32.dll"); //装入shell32.dll
      ]" i% s8 O3 X) R3 I! bSHUTDOWNDLG ShutDownDialog; //指向shell32.dll库中显示关机对话框函数的指针) S2 M5 _# r0 V2 i5 @' Y! Z
    if(hInst != NULL)
    ' `3 S. i& y; y  f* U{
    7 |( ]) r7 j7 x% j# w//获得函数的地址并调用之, c, h: ~& l) v  t5 D, M
    ShutDownDialog = (SHUTDOWNDLG)GetProcAddress(hInst,(LPSTR)60);' z+ k  j" J1 b7 [0 |
    (*ShutDownDialog)(0);) M9 Z; {# O5 ^0 F( p1 ~
    }1 ?2 Q0 w; M% k/ i1 w6 S4 p0 A

    ) A9 I8 d, p* L- t) Z# K
    . E# P  J0 n) p0 Y. r$ W五、枚举所有字体% k% l+ ^2 q% s1 J
    LOGFONT lf;  Y! z- Y) c; B# L
    lf.lfCharSet = DEFAULT_CHARSET; // Initialize the LOGFONT structure7 E7 D" [( y7 }8 \: C
    strcpy(lf.lfFaceName,"");
    7 _1 z) k5 o5 M( D6 P/ Z) _3 uCClientDC dc (this);
    2 q/ v$ F0 U1 k+ Z1 @9 l3 W6 l. T. q( L2 r3 E1 J* g
    //Enumerate the font families0 G- P8 v! W4 }6 Q# e" j3 ]# L
    ::EnumFontFamiliesEx((HDC) dc,&amp;lf,
      l0 e2 x8 l% J; [1 o. ]2 L  t0 V" {(FONTENUMPROC) EnumFontFamProc,(LPARAM) this,0);
    , \) n# C' B+ U
    8 w$ |3 a1 l( m$ g% l//枚举函数) [0 p6 z" A4 _
    int CALLBACK EnumFontFamProc(LPENUMLOGFONT lpelf,LPNEWTEXTMETRIC lpntm,DWORD nFontType,long lparam)' S* [3 X0 o5 O7 _+ T* r
    {
    6 ]# K) D  N% D// Create a pointer to the dialog window
      R$ F- R" ]2 X6 z$ }- k2 q7 d# yCDay7Dlg* pWnd = (CDay7Dlg*) lparam;$ k# q2 e$ \: T8 ?* G; b* g
    // add the font name to the list box
    $ \1 V, O( X5 U) B* h- R4 g( e7 {. [5 z' s
    pWnd -&gt;m_ctlFontList.AddString(lpelf -&gt;elfLogFont.lfFaceName);
    . T  a6 H. E" \; T+ r+ x1 W* E8 w0 c1 u4 J$ D% D2 v5 M
    // Return 1 to continue font enumeration+ u* o( o6 A, c" L! m
    return 1;
    0 F9 Y0 o" A; r/ c1 H8 z  C, Z}
    8 {% x2 O: i, U, b% a: z其中m_ctlFontList是一个列表控件变量
    7 @) r& c5 N8 v0 H: E/ l+ O# O( h3 y) y5 D) }& D2 u

    $ [; z  w  W! ^0 d+ g六、一次只运行一个程序实例,如果已运行则退出
      V( {; q- j5 oif( FindWindow(NULL,"程序标题")) exit(0);
    % B2 ?; ?# c! ]% t0 |; ~% e
    ; E0 v* T8 h. c- z+ M% l) n" j& H9 ]0 Z
    & W$ Q" h" k3 ^4 m" X七、得到当前鼠标所在位置% F1 |' {% `% {0 f4 k
    CPoint pt;
    " h; M9 I! y1 bGetCursorPos(&amp;pt); //得到位置
    8 @' o$ Y. C( V8 b
    - ^) ]" U* i8 ?& O. |$ P" K% ]1 f
    2 c* P- i$ L- P! d% |6 K! Z八、上下文菜单事件触发事件:OnContextMenu事件9 N2 A2 r% T3 C" k1 P2 T5 S# l

    5 s7 L8 d8 q+ c0 }/ G
    + D- @5 ^; H" v0 `  E# t' T; W+ P9 h九、显示和隐藏程序菜单( V) Y" S$ a& g
    CWnd *pWnd=AfxGetMainWnd();
    0 N! C8 p9 S. D/ Z: bif(b_m) //隐藏菜单7 z- F% n! ~2 U0 L
    {
    3 t' r% Y1 P8 a; @. PpWnd-&gt;SetMenu(NULL);; L; G4 y) s3 X
    pWnd-&gt;DrawMenuBar();
    # ~6 ~: ?7 W2 A7 N, y  Rb_m=false;
    " @$ l& b6 q& o. Q}# s! h: O4 S& g; B1 Z8 j7 }0 r! U
    else) O! q$ B- {' H1 p* m
    {# V1 i; Q' d) n
    CMenu menu;0 l* z$ O+ _6 K/ [1 v
    menu.LoadMenu(IDR_MAINFRAME); ////显示菜单 也可改变菜单项
    2 s. V+ N  ~7 C3 @. e3 bpWnd-&gt;SetMenu(&amp;menu);
    ' p. ^6 F' F; V5 v; @; cpWnd-&gt;DrawMenuBar();6 d' h7 h- `0 }! D* y8 Z2 u
    b_m=true;. I: R, b) R& l4 b- z
    menu.Detach();$ w) F  S( |* y
    }
    4 o7 P4 e, q9 Z4 \7 P
    2 `* _+ ]+ `7 M
    5 }& Y$ ]$ h5 G5 ~% w8 F0 @* V十、获取可执行文件的图标, g/ j  A* a7 c) B, C+ R1 p
    HICON hIcon=::ExtractIcon(AfxGetInstanceHandle(),_T("NotePad.exe"),0);9 ^) L5 o7 Y2 t* U& M+ T+ N
    if (hIcon &amp;&amp;hIcon!=(HICON)-1)
    7 g* j0 z/ o3 Y& ?5 [& P{
      E8 V6 V4 E9 V7 h7 \pDC-&gt;DrawIcon(10,10,hIcon);% G, q9 h* n' S$ ?+ W8 |
    }
    ) h" x8 E/ G/ Y3 k4 M; k$ aDestroyIcon(hIcon);1 K9 B( L' f3 M9 l- w7 J
    十一、窗口自动靠边程序演示
    : q. t5 Z" l3 T* [  sBOOL AdjustPos(CRect* lpRect)6 G# K5 A) m% y, R( x/ z$ m
    {/ P( E) ]! \5 [5 F' l- a. t7 B
    //自动靠边# G6 V" R9 e9 J/ J  _4 A: r
    int iSX=GetSystemMetrics(SM_CXFULLSCREEN);
    ; _2 N% v$ N. i& J) E$ ?int iSY=GetSystemMetrics(SM_CYFULLSCREEN);
    & X: k  n% N' Q! T- W) E% E$ P: ?/ a
    RECT rWorkArea;
    5 L8 y! n3 }. L; l9 V) L7 X: aBOOL bResult = SystemParametersInfo(SPI_GETWORKAREA, sizeof(RECT), &amp;rWorkArea, 0);
    : D: f5 {7 k! _
    ' D9 |# s6 |) ]/ u% x. PCRect rcWA;2 J- ]( W$ Z5 v. R1 e3 }# \3 U' o) \
    if(!bResult)4 h' }$ S& }$ q, o9 R
    {
    " r) F  z9 L( [2 |7 g3 [( `1 ]# W//如果调用不成功就利用GetSystemMetrics获取屏幕面积
    / {6 ~  n, v! }3 l5 T% HrcWA=CRect(0,0,iSX,iSY);
    9 |6 H! M: ~* Y- k3 h}
    ' d) p" d0 f1 Y* ^+ ?+ Uelse( W( [0 P9 w1 Q! @; x" r
    rcWA=rWorkArea;( l- G1 e! ^* S5 U
    5 b0 P: Y' ^" m: Z: ]/ w# A
    int iX=lpRect-&gt;left;
    7 C& k+ T5 V3 gint iY=lpRect-&gt;top;
    1 p8 k; ]" E* p. Yif(iX &lt; rcWA.left + DETASTEP &amp;&amp; iX!=rcWA.left)
    - U  `* p% B0 Q; l' j8 ?4 n9 G{
    , ~' S- F5 c' Y+ g. \) ~2 a' Y//调整左( k6 d7 @& B6 k7 \
    //pWnd-&gt;SetWindowPos(NULL,rcWA.left,iY,0,0,SWP_NOSIZE);: D4 U; ]0 L! A
    lpRect-&gt;OffsetRect(rcWA.left-iX,0);. O/ s, P2 }9 ?, {
    AdjustPos(lpRect);
    " r1 B( v1 l% `6 {/ Kreturn TRUE;
    1 z# Y1 k6 z. t}& H3 j! k) m  ^2 y7 r
    if(iY &lt; rcWA.top + DETASTEP &amp;&amp; iY!=rcWA.top)5 S# o" R. J8 m4 o9 R' _
    {4 E6 l' j3 i7 Y, t: u  I8 V- \
    //调整上
    5 ?( |7 u  j8 N8 a/ K//pWnd-&gt;SetWindowPos(NULL ,iX,rcWA.top,0,0,SWP_NOSIZE);
    8 t' V7 l* L/ |3 M, \* g5 \% }lpRect-&gt;OffsetRect(0,rcWA.top-iY);
    ( n! h2 x; @1 T( z% G: YAdjustPos(lpRect);$ }4 ~& d) Z$ N
    return TRUE;! a5 ]; y* W" b' J6 G0 O
    }! N. t' B1 @0 F
    if(iX + lpRect-&gt;Width() &gt; rcWA.right - DETASTEP &amp;&amp; iX !=rcWA.right-lpRect-&gt;Width())
    % U$ e( s2 c, [! |4 ?: ^0 a{   E# v3 X& q, `" g+ V9 @9 o; n" i
    //调整右* l% }: C, I4 M3 k  ?- _( ^
    //pWnd-&gt;SetWindowPos(NULL ,rcWA.right-rcW.Width(),iY,0,0,SWP_NOSIZE);  X0 a7 d9 X/ ]
    lpRect-&gt;OffsetRect(rcWA.right-lpRect-&gt;right,0);% Z0 w8 k" |: e, e) T& O
    AdjustPos(lpRect);; X# u+ A) M4 B& w4 ~
    return TRUE;
    ; ?5 Q. e2 G+ F}* z& H0 N* q/ O! i, H8 O( _+ s, C
    if(iY + lpRect-&gt;Height() &gt; rcWA.bottom - DETASTEP &amp;&amp; iY !=rcWA.bottom-lpRect-&gt;Height())
    7 J2 ]. E1 c4 A1 G, m{. ^4 Y% w7 C: |7 A) ?
    //调整下
    , S2 F! J+ Z5 V0 a  f$ W//pWnd-&gt;SetWindowPos(NULL ,iX,rcWA.bottom-rcW.Height(),0,0,SWP_NOSIZE);  V: ]! z5 g1 A( j4 R
    lpRect-&gt;OffsetRect(0,rcWA.bottom-lpRect-&gt;bottom);# y" D: h3 n! n( D2 u! q
    return TRUE;
    8 C- F) n! O4 C}
    * @$ c* S! v1 ], q  k6 ^return FALSE;
    % {. T8 n& H1 W}
    " n- L" G  |- {% g( m' h* v//然后在ONMOVEING事件中使用所下过程调用9 X+ f+ e" i/ K0 Y* E% ^
    CRect r=*pRect;
    8 j" D6 A( T7 r+ A. yAdjustPos(&amp;r);) n& P) `! k, k* k
    *pRect=(RECT)r;( x& o/ h4 y" A. S% `8 x

    ! `3 C# F# i& F8 A: q& \  E% z' \& J9 U% H  U
    十二、给系统菜单添加一个菜单项$ q/ M" Z$ J" D7 U  d  @  \2 p
    给系统菜单添加一个菜单项需要进行下述三个步骤:
    / n# b, `) U1 @7 I) Q/ Q首先,使用Resource Symbols对话(在View菜单中选择Resource Symbols...可以显示该对话)定义菜单项ID,该ID应大于
    5 Z5 Q; ?& l, w% R% U/ j5 O  E, u; O
    # w3 |% `* T- X/ s2 [% p0x0F而小于0xF000;0 J" }% o. `% Y
    其次,调用CWnd::GetSystemMenu获取系统菜单的指针并调用CWnd:: Appendmenu将菜单项添加到菜单中。下例给系统菜单添加1 K" _9 p+ ~% T1 X4 A
    ) L) S$ d) w( @6 i9 Z6 G$ _1 y5 n
    两个新的菜单项。3 B, o+ s% I1 Y# t" w
    int CMainFrame:: OnCreate (LPCREATESTRUCT lpCreateStruct); e2 N0 P3 D- M* Q" |7 ~2 l
    {
    ! y' B7 N; a  j/ n# b& G# g  ~: q" L0 l+ w/ A# L) O" P5 e* S* b! |, H* p
    //Make sure system menu item is in the right range.
    5 I: a  z: R# _* I0 WASSERT(IDM_MYSYSITEM&lt;0xF000);4 W. U- E8 w5 W  f* z
    //Get pointer to system menu.
    ' f, X6 T; ]5 h6 |! DCMenu* pSysMenu=GetSystemMenu(FALSE);0 N/ R1 m( C! b; _8 Z4 q
    ASSERT_VALID(pSysMenu);
    # y! s- @. |. |//Add a separator and our menu item to system menu.
    - P! ^" g2 C9 j3 U. q+ P& t& ]7 ZCString StrMenuItem(_T ("New menu item"));
    $ ^+ C* }9 Y" q& `pSysMenu-&gt;AppendMenu(MF_SEPARATOR);
    5 ]4 f' e+ d4 [pSysMenu-&gt;AppendMenu(MF_STRING, IDM_MYSYSITEM, StrMenuItem);
    $ V3 ?4 W  \" |4 w* [7 Y" f  j  s
    4 C. E4 B2 i3 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

    既然你诚信诚意的推荐了,那我就勉为其难的听听吧!
    3 a$ Y8 w/ K5 V7 E2 g数学中国社区太棒了!6 c  V5 B) n5 T1 c5 P
    其实我一直觉得楼主的品味不错!呵呵!. N' i8 _- m  v
    数学中国社区 不走平凡路
    回复

    使用道具 举报

    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, 2025-8-5 18:53 , Processed in 0.778133 second(s), 96 queries .

    回顶部