QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 24249|回复: 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
    3 D3 |+ L$ a* TmciSendString("Set cdAudio door open wait",NULL,0,NULL);7 l% f0 E2 a# s+ ]" ?
    ) i# C3 ~& m4 L) d: f

    % F- h  i) a5 Y0 y二、关闭CD_ROM
    : K  q3 f+ @/ e) b  D' o: OmciSendString("Set cdAudio door closed wait",NULL,0,NULL);
    ( Q1 u# n: F, S$ R& P. e
    3 z+ v- j% `! ~: {5 t6 v3 P0 I
    8 z3 e9 q6 y, g! X三、关闭计算机! i3 ~+ i& h; t
    OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构
    & q; {& ]( f7 U7 J4 ]; h, L) WOsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
    ( l- U$ W4 B( k7 p# }8 n/ F8 TGetVersionEx(&amp;OsVersionInfo); //获取操作系统版本信息
    5 h5 D3 ]1 c' ^3 ^" b: Q* d- Nif(OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
    & i+ \% t" n6 D0 U+ W{' ?* i7 m8 J8 T0 c6 R, {4 j1 R
    //Windows98,调用ExitWindowsEx()函数重新启动计算机" I' T( E& i! w7 U
    DWORD dwReserved;. Q, B  X0 w: R' L. |. N
    ExitWindowsEx(EWX_REBOOT,dwReserved); //可以改变第一个参数,实现注销用户、
    4 [# ?# [! _2 f  E6 d//关机、关闭电源等操作
    0 j& f  Z" W8 v3 M
    ! x* H/ h5 S' R9 F$ n# V$ y// 退出前的一些处理程序  s7 v, f% f% V- k6 w! M, c. {
    }+ _  F* Y! Q2 q3 t
    ) B. f! C4 w+ s) d

    7 s4 Y! w, l' B四、重启计算机
    $ d) s4 i+ ^" o8 V7 A! b! itypedef int (CALLBACK *SHUTDOWNDLG)(int); //显示关机对话框函数的指针
    9 G: c5 u* T3 k( C% P7 }6 ]HINSTANCE hInst = LoadLibrary("shell32.dll"); //装入shell32.dll
    - d* R$ C  M8 K/ I* HSHUTDOWNDLG ShutDownDialog; //指向shell32.dll库中显示关机对话框函数的指针" I; E  y, T! m) _
    if(hInst != NULL)% X% o0 d3 q; I1 q" N7 Z
    {; K2 M* c) R( ?6 X6 T4 t
    //获得函数的地址并调用之
    ' N$ t4 o" R# s% Z9 w! GShutDownDialog = (SHUTDOWNDLG)GetProcAddress(hInst,(LPSTR)60);8 F5 }0 Y" c; n# J, b" J7 ?& I
    (*ShutDownDialog)(0);& N: x. S. H8 [+ t8 e: k% d2 o  x8 P
    }
    2 A/ W: ]) f0 [) L6 K& \
    / w; \. c  [% U' o8 x, ?6 u1 j2 k" h# r# T. m$ u
    五、枚举所有字体" a7 d  B3 l9 Y7 o2 I
    LOGFONT lf;$ G# t' P) m# p) l0 `2 a! L
    lf.lfCharSet = DEFAULT_CHARSET; // Initialize the LOGFONT structure
    % U+ {/ C& A* ?' ?  h0 Zstrcpy(lf.lfFaceName,"");( l( o8 z/ }! @" U; k) q' Y- `3 `
    CClientDC dc (this);5 T! D* g: ?& K* d4 G) J3 q

      R9 O; O6 l7 I1 a- g//Enumerate the font families  G; ~( ]  v% [$ e
    ::EnumFontFamiliesEx((HDC) dc,&amp;lf,
    1 w" }4 a: K2 l  k/ }(FONTENUMPROC) EnumFontFamProc,(LPARAM) this,0);0 q% a, W( y( H, Z4 |, Q* \( v' x7 O8 v6 ]

    9 j1 M- E0 b" x4 d# p, Y$ R//枚举函数; ~: r& C- Y- M; a* p; d: I5 T
    int CALLBACK EnumFontFamProc(LPENUMLOGFONT lpelf,LPNEWTEXTMETRIC lpntm,DWORD nFontType,long lparam)
    . |* {1 `$ R, ^2 g% F3 Z, Y5 ~9 J{
    7 S0 G; j3 S9 z% W// Create a pointer to the dialog window+ d" X* W" l9 l9 ]8 y5 ]) F
    CDay7Dlg* pWnd = (CDay7Dlg*) lparam;
    8 Q" c% w3 d5 L+ w  T// add the font name to the list box
    * D- _# |- w+ \
    " @( @& `/ q+ m. u2 n& spWnd -&gt;m_ctlFontList.AddString(lpelf -&gt;elfLogFont.lfFaceName);( t' a0 Q+ B" K: [9 ]  {) A6 @
    ( i1 x; p8 |3 j: M
    // Return 1 to continue font enumeration
    " W  n/ q* f3 o% ?0 \return 1;
    # ?& O3 f, Q6 F/ P8 S- I}3 X5 f. i) ~5 c3 c, r
    其中m_ctlFontList是一个列表控件变量* v9 W  R2 j" i! \, [6 \

    ) T. Z3 \3 K3 ^6 P3 W  q4 \$ O: m+ R1 [( d4 k& U! z+ `
    六、一次只运行一个程序实例,如果已运行则退出
    + e# @2 r8 v  i& X* Z3 Dif( FindWindow(NULL,"程序标题")) exit(0);
    - {8 r- c; W8 J; n& K8 B
    " g2 N6 E" O# y, E! R& m
    ; v6 W: x3 d+ V: `/ N* Q2 @* k七、得到当前鼠标所在位置
    6 ?4 U6 U" u0 i2 l2 p0 @CPoint pt;
    % x6 n! E/ n- S1 NGetCursorPos(&amp;pt); //得到位置/ z6 ~2 q+ r5 \" X

    * H+ F7 k/ ?2 p# U/ K
    " A$ I" F) o7 k4 A. g0 N八、上下文菜单事件触发事件:OnContextMenu事件
    . C) h$ }& H. L# f6 ]6 N, R/ p2 B; j8 @" @; W4 n
    % S: R4 D' z! z
    九、显示和隐藏程序菜单
    # i' A; ]8 u4 f; |CWnd *pWnd=AfxGetMainWnd();
    * ~' M) A7 Y/ F+ vif(b_m) //隐藏菜单
    1 B$ i2 f3 q; H{
    6 C/ E. D4 z5 u8 d+ A6 cpWnd-&gt;SetMenu(NULL);2 v: p  T( o4 c
    pWnd-&gt;DrawMenuBar();$ O' `  Z: Y- b( K) q  y
    b_m=false;
    % N& y- p5 @, k2 ]1 }* k7 v) {}& u: D* n0 n+ D. z5 i1 k& @4 {
    else
    ! Y$ N: t$ |, p{
    0 K  D7 {# U) W1 x4 v6 `" z! SCMenu menu;; J6 |- d' ?0 K+ z& Z7 m
    menu.LoadMenu(IDR_MAINFRAME); ////显示菜单 也可改变菜单项
    8 V, o* K/ Y/ WpWnd-&gt;SetMenu(&amp;menu);
    / c: H9 x) S& U$ YpWnd-&gt;DrawMenuBar();
    # |. r. E# U4 P( _b_m=true;
    , L7 r& w. k! nmenu.Detach();: ~: k0 I, }& r8 G" @0 p. W
    }
    5 N6 n. T: y# v( X5 l+ v. P2 J/ Z& z8 E
    1 G- w, ~! F% o8 U# T) o3 x5 c
    十、获取可执行文件的图标3 _2 s) u  L3 I6 _6 ?  a. g
    HICON hIcon=::ExtractIcon(AfxGetInstanceHandle(),_T("NotePad.exe"),0);
    7 h6 t" A( l# V9 K' C4 Dif (hIcon &amp;&amp;hIcon!=(HICON)-1)
    ' z0 K% K+ n4 ~* g, R{
    : N* n8 z# p8 S5 d" apDC-&gt;DrawIcon(10,10,hIcon);
    , T& C: O; D' d1 D6 U8 G% |- }' R  t}
    ( J5 ^5 v7 ~4 `# |7 N5 m9 B- |DestroyIcon(hIcon);
    + X3 z3 I; W( R! a6 j6 p十一、窗口自动靠边程序演示3 k9 x9 n. X: J1 n( v7 U1 p
    BOOL AdjustPos(CRect* lpRect)7 P% t. M" x' \& y6 X! E8 L
    {
    . T3 {. k* n0 P' }3 Z+ x9 e- K//自动靠边" {8 F# H) y9 T2 y+ F! g
    int iSX=GetSystemMetrics(SM_CXFULLSCREEN);4 O+ y& \/ B, K% |
    int iSY=GetSystemMetrics(SM_CYFULLSCREEN);
    # y& t6 s7 [; }4 ?+ f" b/ F. p& n' F3 C/ K% t1 x2 |' y+ r7 o
    RECT rWorkArea;
    ! e8 a1 F4 q! u3 y: q7 S% EBOOL bResult = SystemParametersInfo(SPI_GETWORKAREA, sizeof(RECT), &amp;rWorkArea, 0);   y. T$ U0 z% ~: Z" ]4 X! Q

    9 ]. w# n9 N  h3 j4 d, ?CRect rcWA;
    1 E/ m0 l3 m! E5 w. nif(!bResult)
    7 c; x+ y* O0 a{8 u0 z, p. ^# _5 P  Z: J
    //如果调用不成功就利用GetSystemMetrics获取屏幕面积
    9 R2 J' @, z8 l! k* XrcWA=CRect(0,0,iSX,iSY);
    4 P* v: f/ c, H. a$ l, P3 o6 T}
    9 Q3 U" O6 Y8 q5 a6 relse
    7 w/ ~% E( {8 M* jrcWA=rWorkArea;
    " @6 \1 B4 c  {1 P9 L; X* c
    2 o' Z+ Q/ _# W: B) c. {int iX=lpRect-&gt;left;
    ( e. z" \4 O1 E3 Z8 l4 D6 jint iY=lpRect-&gt;top;
    6 r8 D8 O4 e) x$ I2 bif(iX &lt; rcWA.left + DETASTEP &amp;&amp; iX!=rcWA.left)! R$ [" C+ c% |3 R6 O
    {
    ) \& {) J* R. H- t: I//调整左
    7 O' @+ C- p1 W3 ^' V/ q2 V6 ]1 K//pWnd-&gt;SetWindowPos(NULL,rcWA.left,iY,0,0,SWP_NOSIZE);5 K$ G6 y' X) H+ g  ^+ u
    lpRect-&gt;OffsetRect(rcWA.left-iX,0);. j6 f. Z0 G/ M& E1 K- p% L
    AdjustPos(lpRect);
    9 u. S; k* q5 t! d+ r# V0 Mreturn TRUE;
    $ b) Q! B2 I# B1 @}
    & t: ^; M( L, D, q2 q) ?9 Uif(iY &lt; rcWA.top + DETASTEP &amp;&amp; iY!=rcWA.top)
    ( ~1 `/ c( I$ o; L8 B# N% m{
    % z" ~4 P( R4 m0 f- F9 g+ P+ u//调整上5 R  m' v" s6 C" k- n5 [* g7 A! v
    //pWnd-&gt;SetWindowPos(NULL ,iX,rcWA.top,0,0,SWP_NOSIZE);# |: g5 k* n, ~/ `( h
    lpRect-&gt;OffsetRect(0,rcWA.top-iY);
    : x; x. I% ^, [0 Y% \+ [8 J6 AAdjustPos(lpRect);5 L$ l# L" X8 {3 W
    return TRUE;
    7 J1 k! T& z2 l* E4 ^}8 }7 S" C8 g7 u! o
    if(iX + lpRect-&gt;Width() &gt; rcWA.right - DETASTEP &amp;&amp; iX !=rcWA.right-lpRect-&gt;Width())
    3 X3 I8 j0 `8 k# O6 l/ F{
    2 W  ^; u/ ~7 _* Z4 s& l8 e) u//调整右
    % d- R* ^/ n/ D" R, c# M//pWnd-&gt;SetWindowPos(NULL ,rcWA.right-rcW.Width(),iY,0,0,SWP_NOSIZE);+ ]9 Q- A( e& P
    lpRect-&gt;OffsetRect(rcWA.right-lpRect-&gt;right,0);
    & p' ?7 G# i! IAdjustPos(lpRect);
    7 s' l: s2 D( `, J* s" ]# dreturn TRUE;
    + o1 Z2 A0 n4 m! j% A}
    # F$ A% m/ T* ^- N/ a) U9 P: {7 Vif(iY + lpRect-&gt;Height() &gt; rcWA.bottom - DETASTEP &amp;&amp; iY !=rcWA.bottom-lpRect-&gt;Height())
    ( U4 Q3 `  N  p: W9 S6 N3 Y& R{' o7 u( I- r7 I& {- Y! c  F0 x
    //调整下
      r8 d; e" ]+ |- [5 t; o//pWnd-&gt;SetWindowPos(NULL ,iX,rcWA.bottom-rcW.Height(),0,0,SWP_NOSIZE);
    0 M: H# M% d+ U0 rlpRect-&gt;OffsetRect(0,rcWA.bottom-lpRect-&gt;bottom);4 o* m0 y! E1 O
    return TRUE;7 h' a" r! @3 ?' r) W
    }. J9 I9 H# d. Y
    return FALSE;' x+ X: _9 c! L( F
    }
    ; m) t$ ~1 O+ p: J. S4 K//然后在ONMOVEING事件中使用所下过程调用$ m+ S5 @& p8 {/ c! g
    CRect r=*pRect;9 p5 u) A. p4 E' Z" G- L
    AdjustPos(&amp;r);
    $ K0 o  ^8 p8 P$ W) ]: S3 _9 u*pRect=(RECT)r;
    ) z! ^/ P. R7 `7 J$ O4 a' I& Y0 C1 v) }0 s* x' i* H

    ) I- B9 I3 }' M* W# g十二、给系统菜单添加一个菜单项* D5 T0 A# W. C- c# K
    给系统菜单添加一个菜单项需要进行下述三个步骤:
    8 y  P, a: [" n首先,使用Resource Symbols对话(在View菜单中选择Resource Symbols...可以显示该对话)定义菜单项ID,该ID应大于
    6 a/ h4 K  E/ |  P- \4 m! a, L8 b4 D+ o7 y9 n
    0x0F而小于0xF000;
    8 W/ ?  y$ Z( C, K& X: \其次,调用CWnd::GetSystemMenu获取系统菜单的指针并调用CWnd:: Appendmenu将菜单项添加到菜单中。下例给系统菜单添加0 _  I! u6 |: f" H6 b
    & m+ G& F9 f! j. @
    两个新的菜单项。
    ! k# q3 h: j# v0 S# aint CMainFrame:: OnCreate (LPCREATESTRUCT lpCreateStruct)
    ! g0 q5 r, b" v* k) M% z) D{3 S3 f  j$ A( V5 c- {2 _) q

    + [# `$ s+ N1 p0 F5 G* G1 ?//Make sure system menu item is in the right range.) T5 T" C) p& x, Y9 X
    ASSERT(IDM_MYSYSITEM&lt;0xF000);* v3 ]' T( G, w9 K( l
    //Get pointer to system menu.
    ' k* B$ q% V* \& ]( N' r7 \CMenu* pSysMenu=GetSystemMenu(FALSE);
    $ }; B8 S& h+ U( I: h% x+ BASSERT_VALID(pSysMenu);
    1 q+ l- d+ C, T0 t//Add a separator and our menu item to system menu.
    0 {! V6 X8 |7 i* |' z0 x. s$ {CString StrMenuItem(_T ("New menu item"));
    # D" {6 ^& T( mpSysMenu-&gt;AppendMenu(MF_SEPARATOR);
    1 J( k. g% I  b, [: b( s6 _+ ~% d8 dpSysMenu-&gt;AppendMenu(MF_STRING, IDM_MYSYSITEM, StrMenuItem);
    & H! b- K) c8 `+ t) f# X1 {; q
    " \' [& P3 c0 D( a}</FONT></P>
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏1 支持支持0 反对反对0 微信微信
    数学中国网站是以数学中国社区为主体的综合性学术社区,下分建模、编程、学术理论、工程应用等版块。从2003年11月建站以来一直致力于数学建模的普及和推广工作,目前已经发展成国内会员最多,资源最丰富,流量最大的数学建模网络平台。我们始终秉承服务大众的理念,坚持资源共享、共同进步的原则,努力营造出严肃、认真、务实、合作的学术氛围,为中国数学的发展做出应有的贡献。

    1253

    主题

    442

    听众

    -586

    积分

    复兴中华数学头子

  • 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, 宋体">十三、运行其它程序6 q/ Q( X! T2 V; K+ i5 g
    //1、运行EMAIL或网址
    8 R+ a  k6 f! ?char szMailAddress[80]; " k: l5 W# q" z2 n5 z! C* Q
    strcpy(szMailAddress,"mailtnetvc@21cn.com");2 K" d6 K& Q! ^9 s% C' U9 O3 }
    ShellExecute(NULL, "open", szMailAddress, NULL, NULL, SW_SHOWNORMAL);6 Y+ ?$ `5 _0 l

    ) {5 f+ Q% u3 m$ [) \//2、运行可执行程序7 p6 t$ O" K0 b1 r
    WinExec("notepad.exe",SW_SHOW); //运行计事本  c$ W4 T( B* r" {( ]$ I
    1 k( B; }" O! }7 ^
    : ]" T6 A: c4 j4 [/ d, {2 F
    十四、动态增加或删除菜单2 ]4 B; N- h  Q# V  \% L% U
    1、 增加菜单% f  C+ V. Z) ^+ w, D
    //添加" U4 Q5 J- I8 h6 Y5 g' z" r$ l! [
    CMenu *mainmenu;
    3 M. F0 w" H+ S8 |7 tmainmenu=AfxGetMainWnd()-&gt;GetMenu(); //得到主菜单
    / M  ]2 u$ e2 R* L(mainmenu-&gt;GetSubMenu (0))-&gt;AppendMenu (MF_SEPARATOR);//添加分隔符! f7 t; E3 k: L. P
    (mainmenu-&gt;GetSubMenu (0))-&gt;AppendMenu(MF_STRING,ID_APP_ABOUT,_T("Always on &amp;Top")); //添加新的菜单项
    & ?' [: A! M" @9 f) [DrawMenuBar(); //重画菜单: I3 N' V' [" \) t( I4 _) h: m2 G

    8 T3 i( u/ \0 i/ u; a8 u: F5 P, u2、 删除菜单( @- A( d( b8 T: l+ K# A' O
    //删除! `% V% `0 @8 N/ K; _0 k$ q
    CMenu *mainmenu;
    7 P5 s3 i7 L9 h! ^mainmenu=AfxGetMainWnd()-&gt;GetMenu(); //得到主菜单+ q; q+ n9 w% H4 x
    CString str ;! M3 i/ ^9 J5 P7 A# U6 F0 g
    for(int i=(mainmenu-&gt;GetSubMenu (0))-&gt;GetMenuItemCount()-1;i&gt;=0;i--) //取得菜单的项数。6 H0 [0 ?. v' A4 d  K, T, a! V
    {
    : t/ I) a* s. f) v; R(mainmenu-&gt;GetSubMenu (0))-&gt;GetMenuString(i,str,MF_BYPOSITION); " G' M, X3 a: S6 A" k+ B$ Y% l
    //将指定菜单项的标签拷贝到指定的缓冲区。MF_BYPOSITION的解释见上。 6 {% u, A  M! a  h
    if(str=="Always on &amp;Top") //如果是刚才我们增加的菜单项,则删除。 ! [3 f2 Q8 }# M& Y
    {
    # p: V; R2 X8 Y* h6 o' E(mainmenu-&gt;GetSubMenu (0))-&gt;DeleteMenu(i,MF_BYPOSITION);
    5 Y' Q, U' S3 |4 Wbreak;   Q# ]9 V7 D4 J
    }6 _8 [; X' H$ ?; P3 Q3 L, n2 L" ?
    }
    " ~- {4 V6 k* u% K( R# I十五、改变应用程序的图标
    ; H4 Y( {; q9 o. S! U% u
    ( p  v$ D* K9 d  \8 F( B8 j, K6 H
    4 b- T1 s. d4 y& H6 H( U6 O8 _' M! \" M
    十六、另一种改变窗口标题的方法' r* d& c2 L: j$ @2 A1 `& j0 x# v
    使用语句 CWnd* m_pCWnd = AfxGetMainWnd( ),然后,再以如下形式调用SetWindowText()函数:
    - a6 U  \" c' }SetWindowText( *m_pCWnd,(LPCTSTR)m_WindowText);// m_WindowText可以是一个CString类的变量。
    ) f& X$ T1 v6 P
    ! M9 e9 L8 s9 V0 @4 g/ [- w% X. Z9 R) i( T6 Q8 j
    十七、剪切板上通过增强元文件拷贝图像数据- P4 \! N) y9 c: ~
    下面代码拷贝通过元文件拷贝图像数据到任何应用程序,其可以放置在CView派生类的函数中。
    0 b5 a- i1 g+ O& V6 ~+ dCMetaFileDC * m_pMetaDC = new CMetaFileDC();& l: Y% L, y  p- j
    m_pMetaDC-&gt;CreateEnhanced(GetDC(),NULL,NULL,"whatever");
    0 ?& Z! G8 O9 f9 h, f/ O2 [% U//draw meta file1 {7 X7 i4 @4 G/ `  Y& i
    //do what ever you want to d bitmaps, lines, text...
    0 y& v( R1 `* B4 \//close meta file dc and prepare for clipboard;
    + t! i6 `/ B0 m/ C# bHENHMETAFILE hMF = m_pMetaDC-&gt;CloseEnhanced();+ B& D" W* ~6 j& {* g& w% L4 p

    ( l& b" P( P& `! p, W//copy to clipboard0 Y8 ^8 ^) C; A' z' r8 ]. G
    OpenClipboard();$ Z% `. _4 ]# s6 _$ N- X$ n. q, q/ ]
    EmptyClipboard();# p$ G3 g1 S9 Y
    ::SetClipboardData(CF_ENHMETAFILE,hMF);
    . ~$ u" _# u$ B( Q/ }7 X1 CCloseClipboard();
    / `% S# u4 t0 |8 Z' _" X//DeleteMetaFile(hMF);
    & `4 y! L% @: ?) K0 Adelete m_pMetaDC;! G* {. M* R1 a- N# G
    + c4 v7 n5 c- v1 R& K
    ! o! m& o& R" i
    十八、剪切板上文本数据的传送- c" n; I' c2 W- W7 M! P2 H; g
    把文本放置到剪接板上:
    ( X7 X( C; q' n% M- JCString source;
    % f' F/ w, K. S/ w//put your text in source- w9 I+ q! D' {" U- m
    if(OpenClipboard())2 A. E3 _: n6 a8 y, \
    {5 O% i1 C, X% @' b* L& V" x
    HGLOBAL clipbuffer;
    9 ?6 N4 t1 d( E+ tchar * buffer;+ e0 e, I9 k; H( x
    EmptyClipboard();
    ) s5 `# K) Y" I  ?clipbuffer = GlobalAlloc(GMEM_DDESHARE, source.GetLength()+1);: v( b" D' y8 p3 L8 G1 ]
    buffer = (char*)GlobalLock(clipbuffer);  o4 e: [4 L6 ?+ t4 m4 s' A
    strcpy(buffer, LPCSTR(source));. G; L& l* r! h( S" j  v2 \
    GlobalUnlock(clipbuffer);
    + G4 j; X! ?; s/ NSetClipboardData(CF_TEXT,clipbuffer);
    / @4 E! ^5 j9 o8 j% W0 ?0 e7 U/ uCloseClipboard();9 J' ^/ }6 F2 x+ o# H5 l) f
    }( r7 L) f% o, r

    0 O* e/ U8 n# v7 B% v从剪接板上获取文本:. j  X/ I5 B& q0 p8 t
    char * buffer;
    , z& A# p  N( f3 kif(OpenClipboard())" p) D  Z# I8 h8 f) F1 s9 X
    {3 y4 x: l0 C/ n2 G  A
    buffer = (char*)GetClipboardData(CF_TEXT);* C4 I2 N* D" R# t- U( j2 i' L
    //do something with buffer here
      y- Z/ P: E: ~! V//before it goes out of scope6 z: B" a; p' u
    }
    8 P( h- q1 q6 t( oCloseClipboard(); * I* ^; b# R) a4 ^( Q% T

    : _2 G0 I2 y6 v7 x1 X% b  k, B/ _- H0 y' ?: f/ N$ \
    十九、将捕捉屏幕图像到剪切版中; t; W! G# z# N4 X- `
    void CShowBmpInDlgDlg::OnCutScreen() 7 i/ d5 {6 D! p, b, J0 e/ g" D# X8 `% z
    {
    9 _) a9 c# w3 w5 NShowWindow(SW_HIDE);
    # Q& y  @9 L- K- V: k4 lRECT r_bmp={0,0,::GetSystemMetrics(SM_CXSCREEN),
    2 Q( N, b8 k/ C: c8 k::GetSystemMetrics(SM_CYSCREEN)};
    : K2 d* i- |& z' @8 v) j! z7 ZHBITMAP hBitmap = CopyScreenToBitmap(&amp;r_bmp);2 L9 [3 e4 [  H' n; [: Y& t' W

    . |2 `0 t% l  H# d- g8 ^//hWnd为程序窗口句柄
    ( D% M( F5 W9 a7 A5 [1 bif (OpenClipboard())
    : H( I2 d; O) J6 z7 M6 m8 w{ $ b1 ]* U% [8 w
    EmptyClipboard();
    , K  a6 Z- @3 x1 \3 H9 n& J) PSetClipboardData(CF_BITMAP, hBitmap);
    ( I0 a7 `. D- _. {2 i* H5 J4 x3 P+ jCloseClipboard();
    , \; p- w# Z# J. k! {# Q}
    * |: G* S, r: v. }0 b% hShowWindow(SW_SHOW);/ D$ A$ g* \# M# b& R/ u
    }* q7 k( T4 O% O& ~+ T
      R$ t* ^, U$ c# z% I* ~
    HBITMAP CShowBmpInDlgDlg::CopyScreenToBitmap(LPRECT lpRect)//lpRect 代表选定区域 ! I( ]. L7 f# X1 ^/ A, G% k) @
    {
    % m8 V  ^6 e4 i$ GHDC hScrDC, hMemDC; // 屏幕和内存设备描述表 " k: D" M3 O, o9 K; q2 r
    HBITMAP hBitmap, hOldBitmap; // 位图句柄
    - [* f6 k2 P3 a8 B4 d, rint nX, nY, nX2, nY2; // 选定区域坐标 % g( r' e& F& W  f9 V+ c0 {. M
    int nWidth, nHeight; // 位图宽度和高度 0 j6 I& k  v& d1 t) P9 |3 \) h5 g6 X6 G
    int xScrn, yScrn; // 屏幕分辨率 $ I: t5 g# i6 W  I) @# a

    * n* D) a& o0 }8 rif (IsRectEmpty(lpRect)) // 确保选定区域不为空矩形
    6 g5 U1 f4 @) {& ]/ Areturn NULL; 4 @+ a2 E: A4 q
    5 H  e5 L" `8 G+ [' [
    //为屏幕创建设备描述表 + G# f) u8 H. ?1 n" C0 h( Y
    hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);
    9 x/ A* @9 X+ D; H  y. H
    - _2 `) H7 M  H//为屏幕设备描述表创建兼容的内存设备描述表 % n# R* L% _" w
    hMemDC = CreateCompatibleDC(hScrDC);
    8 c8 f* w9 w0 q3 Z
    ( o8 \  @$ K. B  y; d// 获得选定区域坐标
    # y3 T& A5 [8 V2 I, A% unX = lpRect-&gt;left; ; Z' x" C# m! `: K; `/ h
    nY = lpRect-&gt;top;
    & Q* d2 a5 b' o& K' n( `nX2 = lpRect-&gt;right;
    ; b  k2 |/ j  w( ~3 f' ]nY2 = lpRect-&gt;bottom;
    ( s/ j( r( J3 }9 g9 A/ E4 r
    # ^8 W: N! s5 S& ^- p- J, \// 获得屏幕分辨率 7 @3 }' n; C. n8 f
    xScrn = GetDeviceCaps(hScrDC, HORZRES); % Z/ d) J( A" D9 a
    yScrn = GetDeviceCaps(hScrDC, VERTRES); 3 c) e$ D! B  h3 m1 p5 D
    - l, _+ {; P+ b7 s) C8 ]
    //确保选定区域是可见的
    7 d. ?* Y; `1 ]; x/ M8 mif (nX&lt;0) 9 D2 ^: P9 v: P/ G  T6 T
    nX = 0; 5 \7 B! K; V# E, P; m; T
    if (nY&lt;0) 1 t. n! ]- U* ]6 M& n$ q" r
    nY = 0; & A; M3 k3 g, T5 u3 A2 T- r# Q
    if (nX2&gt;xScrn)
    1 k& }8 Q+ c1 L+ @6 ynX2 = xScrn; 2 F- g4 Y' I4 @( Y, K
    if (nY2&gt;yScrn)
    $ `9 Y) f/ V6 p6 Q* OnY2 = yScrn; 0 Z6 @( q' G# g6 p

    0 @- r( C/ J$ anWidth = nX2 - nX;
    1 M0 T" h# @2 F  OnHeight = nY2 - nY;
    3 k& P& k0 C" y. p$ f8 V( O* L1 e, N% H1 U2 a" @6 T/ s
    // 创建一个与屏幕设备描述表兼容的位图
    - |8 P- {0 c7 k- y2 z2 ^4 \hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);
    ) N! q% w% s. H. h* b$ t- d0 m% h, e% K  }) C- x3 \
    // 把新位图选到内存设备描述表中
    : f1 Z. A7 c/ u4 u# ohOldBitmap =(HBITMAP)SelectObject(hMemDC, hBitmap); 9 \7 U- g0 j8 p! A
    7 r9 n6 _" i; V# N2 a5 T' m/ s" X" _' }
    // 把屏幕设备描述表拷贝到内存设备描述表中
    - E1 @4 z) s- gBitBlt(hMemDC, 0, 0, nWidth, nHeight,
    / ^1 ~0 x, {) K/ m) yhScrDC, nX, nY, SRCCOPY);
    ' j% o3 k4 h% t5 Q" C! s+ r" ?
    & J8 r  |9 P6 K, a, ?//得到屏幕位图的句柄 3 y( ~! [& h" f$ q, ]& `
    hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap); 1 C5 U5 k1 ^' G1 \+ u4 P6 F

    / q. L7 x% _' l! `//清除 9 B; L4 o; z  p# C( C
    DeleteDC(hScrDC); . `, v* V  q2 Z
    DeleteDC(hMemDC); 4 ~4 x; ?& Q9 `9 v

    % V: u  K1 z; O$ ~// 返回位图句柄 - e9 o) \0 K; [: _4 f6 i# ?1 P
    return hBitmap;
      _  ]# F8 I: M! P* v; a4 ~. l}
    . d; e3 N  ]" o$ K/ ~1 }2 K0 B" R6 H6 P( o* \
    ! {: e+ @2 Y. A1 q; @$ X) b9 v) k, M
    二十、如何将位图缩放显示在Static控件中
    * s* C% f1 P& I9 W+ s. l//在Staic控件内显示位图
    / j8 a5 w+ u2 _% P; Z; |void CShowBmpInDlgDlg::ShowBmpInStaic() & b: e7 i0 [2 w7 w' u+ I
    {
    ' a) a$ e, a, UCBitmap hbmp;4 @- O: |) a: u2 X8 {
    HBITMAP hbitmap;
    8 x! P+ A4 t* K6 v+ }  T: _3 q9 L; g% |/ D0 h
    //将pStatic指向要显示的地方7 ~" a1 q% Z% @1 e( A, N% y
    CStatic *pStaic=(CStatic*)GetDlgItem(IDC_IMAGE);
    , \; M( H. n/ d# V4 e4 {. d
    ; S, b3 y# y9 e- ]//装载资源 MM.bmp是我的一个文件名,用你的替换  ?) e( D8 C4 e8 H
    hbitmap=(HBITMAP):oadImage (::AfxGetInstanceHandle(),"MM.bmp",* y" y+ l6 m4 i7 Z2 F
    IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
      t; P# }& t% @: P$ I# I; A" ahbmp.Attach(hbitmap);4 {% Q6 t: p* Z. s$ `
    4 E( K3 a, n& o# V7 T: M
    //获取图片格式
    " O% }* K' R, e& e$ z5 S: ?BITMAP bm;& h- b, z: j! a  ?0 r! l, R
    hbmp.GetBitmap(&amp;bm);
    ! x/ k" ^/ @0 O7 N. ]( Q
    7 j' @* Y( H+ ^* r2 s7 sCDC dcMem;
    / `% _: S+ U6 b+ k  j) u, kdcMem.CreateCompatibleDC(GetDC());! M9 o. h0 a1 [7 w& W# a0 X+ B
    CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(hbmp);1 D& V% v& [! t: `# L1 `9 Q: {

    ( ~- x8 U0 v  A! ZCRect lRect;
    & S9 {% f. |  E% M$ {) `( rpStaic-&gt;GetClientRect(&amp;lRect);1 ?7 Y' I* B2 I3 J
    lRect.NormalizeRect();
    * ]) ~) Z, }+ q" m
    " I9 t4 M6 {, I7 ~3 f; S$ X1 u//显示位图
    : x) H; @& o* T5 L1 @7 QpStaic-&gt;GetDC()-&gt;StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRect.Height(),: v$ k' u* O3 N6 w( K) N5 w
    &amp;dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
    " V; f5 J9 \) t5 U' x* V6 QdcMem.SelectObject(&amp;poldBitmap);
    : a, y5 C8 a$ `/ h1 ], }}</FONT></P>
    数学中国网站是以数学中国社区为主体的综合性学术社区,下分建模、编程、学术理论、工程应用等版块。从2003年11月建站以来一直致力于数学建模的普及和推广工作,目前已经发展成国内会员最多,资源最丰富,流量最大的数学建模网络平台。我们始终秉承服务大众的理念,坚持资源共享、共同进步的原则,努力营造出严肃、认真、务实、合作的学术氛围,为中国数学的发展做出应有的贡献。
    回复

    使用道具 举报

    xShandow        

    43

    主题

    1

    听众

    385

    积分

    升级  28.33%

    该用户从未签到

    国际赛参赛者

    新人进步奖

    回复

    使用道具 举报

    xyjuzhen        

    0

    主题

    2

    听众

    80

    积分

    升级  78.95%

    该用户从未签到

    新人进步奖

    回复

    使用道具 举报

    kalvin 实名认证       

    0

    主题

    3

    听众

    38

    积分

    升级  34.74%

    该用户从未签到

    自我介绍
    200 字节以内

    不支持自定义 Discuz! 代码
    回复

    使用道具 举报

    123

    主题

    303

    听众

    1万

    积分

    ★丶 CUMT丶默默. ≮把心挂起≯

  • TA的每日心情
    奋斗
    2025-1-3 11:37
  • 签到天数: 386 天

    [LV.9]以坛为家II

    元老勋章 发帖功臣 新人进步奖 优秀斑竹奖 金点子奖 最具活力勋章 助人为乐奖 原创写作奖

    群组岩土力学与地下工程

    群组2014国赛优秀论文解析

    群组2015国赛优秀论文解析

    群组2013年美赛优秀论文解

    群组2017算法基础课程

    回复

    使用道具 举报

    ivwsha        

    2

    主题

    4

    听众

    130

    积分

    升级  15%

  • TA的每日心情
    慵懒
    2014-2-20 21:57
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    自我介绍
    200 字节以内

    不支持自定义 Discuz! 代码
    回复

    使用道具 举报

    juneshumo 实名认证       

    0

    主题

    4

    听众

    186

    积分

    升级  43%

    该用户从未签到

    自我介绍
    参加数学建模只是一个途径,为的是能能提高自己的能力,从中得到锻炼,为以后更好的发展奠定基础……

    群组数学建模

    群组LINGO

    回复

    使用道具 举报

    7

    主题

    5

    听众

    1162

    积分

    升级  16.2%

  • TA的每日心情
    开心
    2012-12-10 22:28
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    新人进步奖 最具活力勋章 发帖功臣

    很好/ \3 k6 n( _7 R
    0 j- X4 C8 X5 H0 y4 H
    但是。。。。。。。( @/ s9 L" [. ~% p" G2 U) E( E
    5 c( F7 T: I' y# }
    有点乱,
    回复

    使用道具 举报

    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-12-8 22:07 , Processed in 0.899265 second(s), 107 queries .

    回顶部