QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 24814|回复: 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
    $ H6 d) N( {- V" O4 FmciSendString("Set cdAudio door open wait",NULL,0,NULL);) f3 e* S* m1 m* p+ N; |
    " x; |% N+ A2 @4 v+ q

    ; F* P" v0 b9 z% w二、关闭CD_ROM
    1 H6 }. g9 i8 FmciSendString("Set cdAudio door closed wait",NULL,0,NULL);( f2 J8 m$ Z3 J' {. c1 _% D+ f

    % f2 r8 I* G. p' ~7 ]1 _+ w6 K5 R+ ]  K" ?
    三、关闭计算机
    8 n: ^9 S/ _0 h/ l) A3 P7 q% TOSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构
    % g  c; a/ e! vOsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
    4 `$ E7 y9 [* ^0 Q6 y/ c$ K4 UGetVersionEx(&amp;OsVersionInfo); //获取操作系统版本信息" n0 w9 b$ ?# f8 x8 a
    if(OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)5 w/ ]$ }: Q8 x# ?) g
    {3 \: ^' @! P' [/ m5 t2 N
    //Windows98,调用ExitWindowsEx()函数重新启动计算机+ N% m  q! L9 |
    DWORD dwReserved;
    / I+ `) t# M# V8 C# m) v# [ExitWindowsEx(EWX_REBOOT,dwReserved); //可以改变第一个参数,实现注销用户、
    8 o+ x; e+ ^) n4 V# T$ O! n% L  y//关机、关闭电源等操作5 m1 B6 c, y% ]4 V/ k

    $ J  S' G/ Y; z6 z7 \// 退出前的一些处理程序
    + E' D) W! x+ s% n6 N, e- @}
    ) y3 m8 n8 H' T% c6 k. v+ ~9 @0 [
    - a' s: K! u6 T: {
    ! l& u8 G* K. M3 G" o3 ]四、重启计算机$ m5 c/ S7 P5 [: I
    typedef int (CALLBACK *SHUTDOWNDLG)(int); //显示关机对话框函数的指针
    ; {: t6 R4 h7 \  q% {HINSTANCE hInst = LoadLibrary("shell32.dll"); //装入shell32.dll0 Y8 C9 B( `$ }" K, p
    SHUTDOWNDLG ShutDownDialog; //指向shell32.dll库中显示关机对话框函数的指针
    9 {9 ?" g0 o; F  p5 Q% d4 rif(hInst != NULL)
    $ f" ^: w7 t2 O6 e{
    + c$ V2 I' @; p) i" ]% x5 d3 I* _//获得函数的地址并调用之. o% c/ p* K& e9 }: l; ]8 a4 _( I
    ShutDownDialog = (SHUTDOWNDLG)GetProcAddress(hInst,(LPSTR)60);- I* T- {8 ~) o/ L5 b% h( Q
    (*ShutDownDialog)(0);8 W* h7 @; N$ V  p0 ~& O
    }
    - K$ c! D6 C" S# G
    * t* K# E+ m! ^8 j3 g
    " B8 ~( o; N! n5 Z; u/ d五、枚举所有字体) w/ \& R9 d2 t9 q+ Q4 e* F
    LOGFONT lf;
      v) w6 P1 T( B& x- V3 xlf.lfCharSet = DEFAULT_CHARSET; // Initialize the LOGFONT structure
    : y  V/ S- N1 u. a* Sstrcpy(lf.lfFaceName,"");7 |$ [$ y; u, v9 _
    CClientDC dc (this);
    1 ^% z5 O# t! Q; h
    $ v2 s2 z' j% [7 S% T1 N0 Q//Enumerate the font families" a5 j+ i; @8 f9 a  j! b# ~" k& o
    ::EnumFontFamiliesEx((HDC) dc,&amp;lf,2 k6 i. g- `0 r/ L
    (FONTENUMPROC) EnumFontFamProc,(LPARAM) this,0);1 l, }' J+ A* z- z. B6 i3 g
    " t1 H: Q3 E8 f% A5 ?2 ^8 s
    //枚举函数
    $ J+ c4 p0 |) P: M& Q; ^; d- Oint CALLBACK EnumFontFamProc(LPENUMLOGFONT lpelf,LPNEWTEXTMETRIC lpntm,DWORD nFontType,long lparam)6 m7 I; c- N: v7 [! ]
    {  ?; ]& X- u8 n' k( H7 g4 N" Q
    // Create a pointer to the dialog window$ |6 a8 j. u* x/ `1 D7 a
    CDay7Dlg* pWnd = (CDay7Dlg*) lparam;& e! y$ b2 J5 q+ {4 u1 L. Y
    // add the font name to the list box  L7 P: ~2 I  B; |# i* A

    0 e9 u$ A4 Y( n9 apWnd -&gt;m_ctlFontList.AddString(lpelf -&gt;elfLogFont.lfFaceName);
    : t# ^( N9 X% l5 z% z# {$ P7 S
    . o  A( `  D$ |" `// Return 1 to continue font enumeration1 ~2 t& u; H0 r8 f" ]' O
    return 1;8 r4 |/ x  U2 S. A) r. ~
    }( J8 t# N0 N! A* J, T8 z1 ]
    其中m_ctlFontList是一个列表控件变量
    * _8 C& V( H( \. @0 i' h( V7 x4 L9 i: {3 l/ F( U4 w

    3 A3 Y& `; }8 Y7 n- V/ C六、一次只运行一个程序实例,如果已运行则退出
    , Q$ p7 O" d% B4 q, A; Pif( FindWindow(NULL,"程序标题")) exit(0);! U! h9 I9 u# ?" a: b. y% s& F
    - J( {8 M; P' y" [7 A. w5 ~
    . s! i# `( d8 ?, x. [7 K$ }  _
    七、得到当前鼠标所在位置; X- n0 ]+ X# E
    CPoint pt;0 i! a: y. }, B( G& D- j. R% D
    GetCursorPos(&amp;pt); //得到位置
    6 Y8 p7 s# B$ e* N" H! O; L* m- M
    ! e' f7 t3 T8 n- D7 b% _  e. ^5 x
    八、上下文菜单事件触发事件:OnContextMenu事件1 R! ]* N% t& X; }( o: ^

    0 J) Z+ i. |& v1 ^
    & n, n: c% r  P! l% [$ s. Z九、显示和隐藏程序菜单% \1 j7 W; [$ }2 k( j+ u. {
    CWnd *pWnd=AfxGetMainWnd();
    . M  A) l4 l: T2 v6 Xif(b_m) //隐藏菜单
    , A% k9 {7 b* k# q6 x2 f{
    5 V8 B: S( t: h) G3 spWnd-&gt;SetMenu(NULL);
    $ ?% J4 d( z# R8 c% f3 e7 `pWnd-&gt;DrawMenuBar();
    5 f7 C& |# a/ K" ~; vb_m=false;
    5 n* G  e6 y2 }' ^$ _9 t}& m( i5 u3 L0 [" }3 E- l
    else
    " W1 G6 U1 M$ B3 k{8 N5 G2 h+ P, T* J7 s. _0 v# J& l; w
    CMenu menu;
    0 [0 J  X, u+ J6 M& fmenu.LoadMenu(IDR_MAINFRAME); ////显示菜单 也可改变菜单项
    * n$ u; Z+ i& i0 q( M+ F+ z6 [pWnd-&gt;SetMenu(&amp;menu);( X" n% v" {+ h  r7 _9 G% m# n
    pWnd-&gt;DrawMenuBar();3 K+ W* c: q" {" u# n$ }
    b_m=true;
    ; a  y9 O/ w2 I# smenu.Detach();0 s4 A& S8 m# h$ z- C
    }7 L# j- n8 N( t' u8 A5 @# z
    $ {  ~5 j6 G, ^9 t  B

    / \7 k6 ~7 U- J- I2 o! w& O十、获取可执行文件的图标, ]; J; e7 |, O( _. D5 C/ r
    HICON hIcon=::ExtractIcon(AfxGetInstanceHandle(),_T("NotePad.exe"),0);
    , n  [$ z- F% y7 ~, L5 Hif (hIcon &amp;&amp;hIcon!=(HICON)-1)
    # f! A/ s9 }4 s  |' E{3 |+ c4 p7 d! k( v8 E
    pDC-&gt;DrawIcon(10,10,hIcon);: }1 l4 j# w: h
    }
    7 W# \0 u0 \0 g! D+ n5 [DestroyIcon(hIcon);3 R  ]- i' y6 `" A! S8 _9 k% @7 o
    十一、窗口自动靠边程序演示' W6 }& ]- u. f) U. d+ ^
    BOOL AdjustPos(CRect* lpRect)6 O0 e3 s( F6 b& _2 m
    {
    1 y, W+ Q; W0 t//自动靠边
    * e" D2 g4 o3 \, tint iSX=GetSystemMetrics(SM_CXFULLSCREEN);
    . Y: W. y9 ^. cint iSY=GetSystemMetrics(SM_CYFULLSCREEN);
    , i3 b3 D; E/ U* ?8 A1 J! k2 u) J3 L# P3 c0 c2 ]! x# c% S6 n( M2 p2 l
    RECT rWorkArea;  s4 y: m- |& n; X  `
    BOOL bResult = SystemParametersInfo(SPI_GETWORKAREA, sizeof(RECT), &amp;rWorkArea, 0);
    & v& G; Y* F1 l, _' }2 {+ W) H
    5 Q3 I8 \3 _5 Z+ z& X! b/ Y* OCRect rcWA;
    2 s  x5 d  S1 l2 qif(!bResult)
    $ P7 K, S% B$ {& Y# D* o% @{( C* c4 p+ i: R$ w# C) `
    //如果调用不成功就利用GetSystemMetrics获取屏幕面积
    9 U/ m9 F# P! X; n3 f% P) n( y, X" grcWA=CRect(0,0,iSX,iSY);. D$ x; E& u+ C/ r4 |9 G* [
    }, l, V) _+ M* A+ x9 E
    else2 H$ R6 }2 [, v+ U* S% l; D
    rcWA=rWorkArea;
    ) \- X/ z/ N( _7 G* [2 x
    $ [3 a0 T# o. S% [) ^' `int iX=lpRect-&gt;left;0 T7 `- j% K) k( [
    int iY=lpRect-&gt;top;- W: x% r/ w% I% e( q9 R3 ^" l) b/ \
    if(iX &lt; rcWA.left + DETASTEP &amp;&amp; iX!=rcWA.left)
    " S' w/ u" B' u0 b2 G0 G% i! H{
    8 `- K# W8 ^; t0 \' R8 K1 K! A% U//调整左
    / o+ \! r* h' C. U8 M/ g//pWnd-&gt;SetWindowPos(NULL,rcWA.left,iY,0,0,SWP_NOSIZE);: V8 U2 ~- A% f& v% B' Q
    lpRect-&gt;OffsetRect(rcWA.left-iX,0);/ }& _# Z. m0 k" {& p& g' W
    AdjustPos(lpRect);
    ) T+ W+ D- j0 `, e* R. i  V/ Greturn TRUE;
    / o2 g* D7 I) I}9 Y% P6 D1 i3 L. {% r
    if(iY &lt; rcWA.top + DETASTEP &amp;&amp; iY!=rcWA.top)
    6 D6 I5 |7 w  \. N8 m0 e2 y0 f- V& W{0 a# [2 L/ T+ |' q% \
    //调整上! s& Q# j, Y0 O' D
    //pWnd-&gt;SetWindowPos(NULL ,iX,rcWA.top,0,0,SWP_NOSIZE);+ q! g  [1 W8 s1 H
    lpRect-&gt;OffsetRect(0,rcWA.top-iY);
    5 f% }$ h0 C3 B  VAdjustPos(lpRect);( I/ _' T7 V# _3 j- v/ T# N
    return TRUE;
    : L8 V4 Q8 c# I0 u$ V}
    8 B4 p- E9 k% k! o! vif(iX + lpRect-&gt;Width() &gt; rcWA.right - DETASTEP &amp;&amp; iX !=rcWA.right-lpRect-&gt;Width())
    ' t/ J" ~% E! e{ * r# b3 v% B7 }/ V
    //调整右$ t# W0 D8 `2 i6 m; r* \6 a
    //pWnd-&gt;SetWindowPos(NULL ,rcWA.right-rcW.Width(),iY,0,0,SWP_NOSIZE);
    1 L1 D5 V, V0 flpRect-&gt;OffsetRect(rcWA.right-lpRect-&gt;right,0);
    9 S. L& M: g4 W7 M. U  sAdjustPos(lpRect);
    . C: I1 [2 X- `return TRUE;$ l1 Q2 E& ]  Z- B' z! J
    }( Q6 {- x* H' B
    if(iY + lpRect-&gt;Height() &gt; rcWA.bottom - DETASTEP &amp;&amp; iY !=rcWA.bottom-lpRect-&gt;Height())
    ( t) p/ r) g' L, u' w# Z3 _{: {0 ~& x6 l+ I6 D( _; }9 [# \
    //调整下
    . g2 ^  S; u$ h% x. I) F( R, \2 o//pWnd-&gt;SetWindowPos(NULL ,iX,rcWA.bottom-rcW.Height(),0,0,SWP_NOSIZE);& w% k/ N& W" P: B' ~1 `
    lpRect-&gt;OffsetRect(0,rcWA.bottom-lpRect-&gt;bottom);; Z# n0 y) h4 P% c
    return TRUE;
    , A' n8 a, U+ O}1 b  R9 d% q/ C4 @0 G2 h: E
    return FALSE;! w: H# k! h3 x' K; s
    }6 J4 r! Y) S. o- ?. Z* i
    //然后在ONMOVEING事件中使用所下过程调用0 x6 _. Q! }+ r1 c
    CRect r=*pRect;
    * C5 m0 O/ \  ?! H2 T& Y4 E! |AdjustPos(&amp;r);
    , v# S4 ]3 _* I) i*pRect=(RECT)r;
    0 Z$ l: m" R  T$ o8 ^9 H% `, o
    8 Q0 W) N5 l/ e% U* }# k4 c% w: @# Y/ o* [/ x( [" e& S
    十二、给系统菜单添加一个菜单项" v9 y# D. ^1 E/ |; ?9 A
    给系统菜单添加一个菜单项需要进行下述三个步骤:
    + e# f$ ^5 n! |首先,使用Resource Symbols对话(在View菜单中选择Resource Symbols...可以显示该对话)定义菜单项ID,该ID应大于# g! F' y7 \: u. X1 W! D/ Y4 A
    6 _9 R3 J+ x$ U6 }( a& p
    0x0F而小于0xF000;  Y6 d: w! k  |# a# C5 k' k% E
    其次,调用CWnd::GetSystemMenu获取系统菜单的指针并调用CWnd:: Appendmenu将菜单项添加到菜单中。下例给系统菜单添加
    ) i1 }% d5 Z/ R2 h& A7 Q* b1 i! |" c7 v3 {) f
    两个新的菜单项。
    + }: w$ p' I( Kint CMainFrame:: OnCreate (LPCREATESTRUCT lpCreateStruct)& }6 M" [, w# M$ [+ B
    {/ Y3 z- }: w/ E1 o" i3 g6 C$ ?

    3 P) C* s) W: F3 J- t0 [: _6 ^//Make sure system menu item is in the right range.( [8 j1 R; c' b9 R
    ASSERT(IDM_MYSYSITEM&lt;0xF000);) e$ l  e+ a7 u1 O* N
    //Get pointer to system menu.7 O# `0 q4 R+ f6 Z0 |
    CMenu* pSysMenu=GetSystemMenu(FALSE);
    , R1 Y9 S# j! rASSERT_VALID(pSysMenu);
    4 x0 w/ f6 m  @& {//Add a separator and our menu item to system menu.
    8 z3 v" m& ?, a! ^0 G" }  aCString StrMenuItem(_T ("New menu item"));
    . L, c4 q* f6 n, B; D1 p( {pSysMenu-&gt;AppendMenu(MF_SEPARATOR);
    ! j# N7 Q3 Z6 ZpSysMenu-&gt;AppendMenu(MF_STRING, IDM_MYSYSITEM, StrMenuItem);
    1 `/ A; P4 j% t' B- I) x8 Q0 p$ ~1 Y$ a3 U; d+ v
    }</FONT></P>
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏1 支持支持0 反对反对0 微信微信
    数学中国网站是以数学中国社区为主体的综合性学术社区,下分建模、编程、学术理论、工程应用等版块。从2003年11月建站以来一直致力于数学建模的普及和推广工作,目前已经发展成国内会员最多,资源最丰富,流量最大的数学建模网络平台。我们始终秉承服务大众的理念,坚持资源共享、共同进步的原则,努力营造出严肃、认真、务实、合作的学术氛围,为中国数学的发展做出应有的贡献。

    1253

    主题

    443

    听众

    -516

    积分

    复兴中华数学头子

  • 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, 宋体">十三、运行其它程序# V8 }# R6 a' t3 Q
    //1、运行EMAIL或网址
    , P( p& U3 W& r% |) Zchar szMailAddress[80];
    6 M/ T/ g- J' w5 Z4 L. ~. Z' j8 ustrcpy(szMailAddress,"mailtnetvc@21cn.com");5 l: |: L: c2 M
    ShellExecute(NULL, "open", szMailAddress, NULL, NULL, SW_SHOWNORMAL);
    3 u3 Q1 t! U; O
    ( }( f$ x9 p2 ]9 J7 ?//2、运行可执行程序
    + B  b5 P; ^8 c/ v9 xWinExec("notepad.exe",SW_SHOW); //运行计事本* q# S8 I! ?$ D: [9 V3 Z
    9 G; r! _6 u6 I  O6 w7 @

    " R! I2 G& _# V) h, N+ y0 e十四、动态增加或删除菜单2 Z: |9 n3 w) }) u2 p$ K
    1、 增加菜单
    9 t8 f- w! h  p% u6 f//添加
    8 c0 ]6 _: h1 L3 fCMenu *mainmenu; 6 o( J  }$ ?6 M, F9 F
    mainmenu=AfxGetMainWnd()-&gt;GetMenu(); //得到主菜单
    ; ?3 w# n+ h# U0 z$ c) B% m# G(mainmenu-&gt;GetSubMenu (0))-&gt;AppendMenu (MF_SEPARATOR);//添加分隔符6 P* |% M( W' ^7 D( U4 ]
    (mainmenu-&gt;GetSubMenu (0))-&gt;AppendMenu(MF_STRING,ID_APP_ABOUT,_T("Always on &amp;Top")); //添加新的菜单项9 J. W+ N- C3 I0 y) Q; I/ L- k
    DrawMenuBar(); //重画菜单1 t* Z+ Y. C- m* @( {

    + t' C( ]. c0 E- X; @2、 删除菜单& i8 m, s. d! K/ k
    //删除4 u4 t# b" G5 e8 `  D, f
    CMenu *mainmenu;
    + i" S* |! ?2 X0 n* k5 t5 smainmenu=AfxGetMainWnd()-&gt;GetMenu(); //得到主菜单* \' h1 O4 l4 k) H2 i) {
    CString str ;( ~+ c0 t) |9 Y+ I* \
    for(int i=(mainmenu-&gt;GetSubMenu (0))-&gt;GetMenuItemCount()-1;i&gt;=0;i--) //取得菜单的项数。3 M. L& P" B5 A8 p: x
    { 3 M& I7 L; M4 ^6 j6 w, y" l
    (mainmenu-&gt;GetSubMenu (0))-&gt;GetMenuString(i,str,MF_BYPOSITION); 7 R) d- w3 H9 o# z- X: Z
    //将指定菜单项的标签拷贝到指定的缓冲区。MF_BYPOSITION的解释见上。 4 U9 O5 ], S6 J$ s$ E  s
    if(str=="Always on &amp;Top") //如果是刚才我们增加的菜单项,则删除。 ; u5 J+ g& @3 ?6 a* I0 l
    { ! l' I/ n/ V: [1 ?+ x- n2 q0 c
    (mainmenu-&gt;GetSubMenu (0))-&gt;DeleteMenu(i,MF_BYPOSITION);
    & s6 U7 e4 r, w* M; Bbreak;
    2 R5 J# T, u) P7 G$ w& H}
    ( B! S6 f0 Z- J: h( T$ _}, k# U1 @4 r, A: h! B  p
    十五、改变应用程序的图标" M( g6 o! ^9 h
    $ n: Q* {4 s, z7 S5 n, R

    8 c5 A+ Q: X2 x: ^: N8 F  `1 X1 G
    & |$ f3 ^$ B; K十六、另一种改变窗口标题的方法
    2 E+ R' E1 O- \. L- V6 D  Y1 V0 d使用语句 CWnd* m_pCWnd = AfxGetMainWnd( ),然后,再以如下形式调用SetWindowText()函数:
    % `2 g6 l* g7 w  T  cSetWindowText( *m_pCWnd,(LPCTSTR)m_WindowText);// m_WindowText可以是一个CString类的变量。2 P* I8 W' ?, J6 M3 n& T* E; p

    ; p6 v& l) @/ B6 q9 B4 X! E) `  `8 i" `
    ! G0 I7 i( W; `十七、剪切板上通过增强元文件拷贝图像数据
    + d" X. q: c: W( g% q- V, n下面代码拷贝通过元文件拷贝图像数据到任何应用程序,其可以放置在CView派生类的函数中。
    - b9 S1 z4 x! c) @# ?, N- NCMetaFileDC * m_pMetaDC = new CMetaFileDC();9 T0 ~- ]5 h8 z
    m_pMetaDC-&gt;CreateEnhanced(GetDC(),NULL,NULL,"whatever");* Q5 Z$ l( x4 ?4 S
    //draw meta file  Q( i/ y8 m, E1 L. ?7 h! E
    //do what ever you want to d bitmaps, lines, text.../ k) o$ l4 V3 C5 d0 e+ A
    //close meta file dc and prepare for clipboard;
    6 k" Y! I* x! a5 r' P* f8 v* D. `8 `HENHMETAFILE hMF = m_pMetaDC-&gt;CloseEnhanced();! X, I9 U6 a4 H( S8 m
    9 h) z% V8 J, E) m/ H
    //copy to clipboard
    7 i5 I+ e. Y- U* ~! `9 }3 \3 o* f/ ZOpenClipboard();8 Q+ s0 a$ [3 n0 p* |
    EmptyClipboard();
    + q$ j4 L, U4 ], i7 `: [::SetClipboardData(CF_ENHMETAFILE,hMF);8 Q7 M- Z6 R+ [' l6 s+ u
    CloseClipboard();2 z) L- `2 V, d, L4 z
    //DeleteMetaFile(hMF);
    ; F6 ?2 G1 Z0 vdelete m_pMetaDC;
    7 Y: `) }$ a( f5 Y, u
    1 k; _8 N0 C! m
    # n& Q. A1 R4 X2 k十八、剪切板上文本数据的传送
    4 a* h( M) k  W) {. @: G把文本放置到剪接板上:: a$ M+ i  d1 `" k
    CString source; 5 T' l! ~; T4 P. y' W
    //put your text in source
    ( b9 o* O/ R+ m' |2 E% h2 d9 sif(OpenClipboard())
    4 t& c) G6 j! ^8 B2 }4 f) [3 C) J{
    / d! t5 w7 M6 Z* F$ u- }1 c8 gHGLOBAL clipbuffer;0 `/ Q2 m- p4 Y+ F! q6 {
    char * buffer;5 [2 [4 V% J5 Z& T
    EmptyClipboard();
    " m' d% T3 _% o0 m  {clipbuffer = GlobalAlloc(GMEM_DDESHARE, source.GetLength()+1);: T+ s! n/ Q; i' ?% I
    buffer = (char*)GlobalLock(clipbuffer);
    : h# e: V& b1 x0 G5 {. Qstrcpy(buffer, LPCSTR(source));
    & t) o7 G7 M0 C' @& ]GlobalUnlock(clipbuffer);/ B- v' }0 Q. r1 d
    SetClipboardData(CF_TEXT,clipbuffer);
    , Y7 b! h4 v1 x. K# s  h! y: ]CloseClipboard();
    ; g+ p, w8 W0 v6 z}! N/ E4 O. b) h1 [( {
    - a  N. H) C+ c9 N" ]
    从剪接板上获取文本:) z" p% S+ @) M5 r9 \
    char * buffer;
    2 X- C( k: `9 N1 lif(OpenClipboard())7 N: [2 O0 w; C5 G1 H
    {
    ' B0 s; z4 h8 f( f+ O/ I1 K3 z" ^buffer = (char*)GetClipboardData(CF_TEXT);  ~* \, x$ ]3 C' {5 s7 V
    //do something with buffer here ( k; e" V$ y" [' ]
    //before it goes out of scope
    # O. J# S! p5 H; S7 }}
    2 e" Q/ c/ R  k+ v$ vCloseClipboard(); 4 E3 F2 {& m: K* l4 _, r

    7 f/ \- b$ L9 k7 U; q6 r* o! K8 a5 n9 t! v/ s
    十九、将捕捉屏幕图像到剪切版中- x7 f( P8 ^6 {! }4 \0 Z/ U
    void CShowBmpInDlgDlg::OnCutScreen()
    : Y7 d8 @6 u3 ^, x$ D{( u4 r0 {2 M) y8 s
    ShowWindow(SW_HIDE);
    - d2 R# f' O3 P6 a! T$ y% }RECT r_bmp={0,0,::GetSystemMetrics(SM_CXSCREEN),, R# j3 G( \/ S
    ::GetSystemMetrics(SM_CYSCREEN)}; 6 G3 T( Q9 y0 H( k
    HBITMAP hBitmap = CopyScreenToBitmap(&amp;r_bmp);
    0 x- K9 W* U0 R" ], @
    " H# K' ?; a; n/ Z//hWnd为程序窗口句柄
    + P. }9 D& c% I  \* l, P; qif (OpenClipboard()) 2 S+ X9 x) v: U# G, f
    { 9 m7 e1 V5 Q/ R5 t5 L
    EmptyClipboard();
    4 }  m6 D3 ^" p! L; [7 TSetClipboardData(CF_BITMAP, hBitmap);
      ?$ n. o; h) fCloseClipboard(); 6 r) [( t' V! Q+ f8 {
    }# U' k* F  R% A1 y- Y! L4 F
    ShowWindow(SW_SHOW);2 m! h4 u0 O! z- F) ~
    }3 U3 h+ C5 V9 k/ F$ R2 W' U7 J
    , \6 b1 n; \' [9 ?0 K$ ?
    HBITMAP CShowBmpInDlgDlg::CopyScreenToBitmap(LPRECT lpRect)//lpRect 代表选定区域 3 Z6 U( S$ l' G; p
    {
    7 M& [$ \+ u: @% I/ CHDC hScrDC, hMemDC; // 屏幕和内存设备描述表
    + a. d5 E, G4 j- }) f6 }1 q) ]HBITMAP hBitmap, hOldBitmap; // 位图句柄
    & w( O  o* R: `6 t' v2 D6 qint nX, nY, nX2, nY2; // 选定区域坐标
    $ L0 _/ Q( l! a( \int nWidth, nHeight; // 位图宽度和高度 ) M. v; t6 B8 O8 `! T. B6 G- H7 D, p
    int xScrn, yScrn; // 屏幕分辨率 1 C" J. N3 D3 B, B

    5 c: X9 J5 H$ W7 S1 }8 fif (IsRectEmpty(lpRect)) // 确保选定区域不为空矩形
    % {: W* |& F4 i' ~# y8 G0 g- Yreturn NULL; . u3 S# \: q: h4 c( t

    ; W/ z5 o) Y, Y! P' {$ o, Z$ u//为屏幕创建设备描述表
    % x; `, Q; Z4 EhScrDC = CreateDC("DISPLAY", NULL, NULL, NULL); 1 Y* G8 j' U" F' z

    3 u" z7 L1 D1 l//为屏幕设备描述表创建兼容的内存设备描述表
    6 H. J4 r. J3 K' A* a/ vhMemDC = CreateCompatibleDC(hScrDC); 4 D' {7 W1 w) ~$ Q, K
      C$ g3 @5 s, A
    // 获得选定区域坐标 % S  [8 y. U' u
    nX = lpRect-&gt;left; " s1 D( |+ ~* P
    nY = lpRect-&gt;top; ( m. P& M4 h$ ~! V  V7 Q8 \+ K9 ^; I0 N, t
    nX2 = lpRect-&gt;right;
    5 [( _' h1 n, b  S- {1 s$ w; W% wnY2 = lpRect-&gt;bottom; / ^" D+ z9 M' c0 v. r- L( A( }% _
    & w8 i# {, f- s. P
    // 获得屏幕分辨率 * H2 ]0 x" z  T0 [! z2 H% ]9 M- D
    xScrn = GetDeviceCaps(hScrDC, HORZRES);
    ) t8 w8 d( k" E) k5 C( fyScrn = GetDeviceCaps(hScrDC, VERTRES);
    % X+ Y8 }9 ^( m- J) {' h* i$ l+ k% _/ ^& x
    //确保选定区域是可见的 2 U6 }% w* Q; O$ i1 h9 G
    if (nX&lt;0)
    0 G) u* p7 o( ~& r% l0 unX = 0;
      Z- d# T4 C  x% Aif (nY&lt;0) 1 `! \+ {) u( |$ x' x4 s5 b
    nY = 0;
    ' T! e* T* h, L. u& D5 O5 c  Uif (nX2&gt;xScrn) 3 ^9 n( I! _5 W! P/ ~+ n0 f
    nX2 = xScrn; 1 Y1 P, ^2 [( X5 F
    if (nY2&gt;yScrn)
    / ~9 ?1 H, }  W$ _2 WnY2 = yScrn;
    ; x& X* Z; ?8 k7 `5 Y) l" ^, K: ]# e
    , `1 L* K- C( l$ z" K* T8 nnWidth = nX2 - nX;
    * u6 p3 c' S/ znHeight = nY2 - nY;
    2 k( }6 U/ }& e& w$ H& o0 v) R: X
    ( D8 o+ |8 l% x/ ^// 创建一个与屏幕设备描述表兼容的位图
    4 S  X' R, Z6 t$ hhBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight); - F! R8 ]2 Y: G4 W( u

    4 N* I) G8 m. H6 E4 }% U$ R6 X# c/ e// 把新位图选到内存设备描述表中
    3 i& {8 g6 e: ^2 bhOldBitmap =(HBITMAP)SelectObject(hMemDC, hBitmap);
    ! I( E# ~% f* _$ L; _; c% Y# b) {& E9 y- v3 f  P1 a
    // 把屏幕设备描述表拷贝到内存设备描述表中 & i. l, G/ X4 Q0 ^/ x6 I, {1 G
    BitBlt(hMemDC, 0, 0, nWidth, nHeight,
    * t- [4 E$ D/ r, shScrDC, nX, nY, SRCCOPY);
    6 T8 H  ^5 Z4 ]* c
    8 Y. z1 [8 f# v//得到屏幕位图的句柄   }6 l- V- g( i2 G
    hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap); 7 b: j" Q1 O6 q  d* V7 X" t

    ! a6 t+ z$ ?* l+ ^; k( V//清除
    : ^  I4 P% A8 ]' Y+ aDeleteDC(hScrDC); 8 Z" L9 g3 u1 }) y& [$ L( U
    DeleteDC(hMemDC); $ X3 T8 F' u- ~4 ^

    1 Q/ X0 |+ d. i7 ]% s! N; Y2 r8 W  R// 返回位图句柄
    4 R6 y/ k# I7 y# U0 B: G6 K3 zreturn hBitmap; 6 j" a) ~% {* k" _0 S( R: b+ _
    }% v9 M2 B. y7 u' H4 @- Z3 o8 w
    ) Q) ~3 `, L# e6 E  M# Z3 }
    ; M, H0 ?, i6 ?/ e
    二十、如何将位图缩放显示在Static控件中# `# `. I" l, m* |- {1 M4 z) A
    //在Staic控件内显示位图1 _# Y! l3 R4 x% B9 i
    void CShowBmpInDlgDlg::ShowBmpInStaic()
    9 `8 }7 R3 ~) g{
    ; z$ L' Q& D( r0 G; m5 r* TCBitmap hbmp;
    # W. i# {7 o* F( d; _( IHBITMAP hbitmap;3 A6 c8 ~; d, @. T6 `' J

    # ~" m9 N' F4 j, w$ G% F3 L) f; Y//将pStatic指向要显示的地方# z% ]' F6 M& A8 E$ {3 v5 I- G9 E
    CStatic *pStaic=(CStatic*)GetDlgItem(IDC_IMAGE);# f5 d% F( ]  v+ ~3 ]

    * A% J6 ?2 L% v! @//装载资源 MM.bmp是我的一个文件名,用你的替换7 c7 a) Z1 i8 \% `+ w/ j
    hbitmap=(HBITMAP):oadImage (::AfxGetInstanceHandle(),"MM.bmp",/ r+ j. f# M- R# M( ^" a
    IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
    " _3 z- ^( L) k9 L0 E: |hbmp.Attach(hbitmap);; Y0 X* H+ j8 O9 ~. Z/ O3 J
    % h7 v& k4 r4 I5 Y1 c. i+ W9 y' Y7 C9 A
    //获取图片格式& M" @/ c& h' E  x3 F
    BITMAP bm;4 D8 f7 x; l0 h7 h# `& ?4 @
    hbmp.GetBitmap(&amp;bm);% b! w2 k6 A6 w2 ]

      M, [6 ~2 ^8 A' ACDC dcMem;) I  s. x# F  c7 D
    dcMem.CreateCompatibleDC(GetDC());/ T* b* b$ @+ H4 N  e
    CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(hbmp);) G! |  R8 H  {! N1 x/ X8 K- x+ p

    ' o1 r, E( Y0 e7 TCRect lRect;
    # ]2 \7 Q9 _; m) {pStaic-&gt;GetClientRect(&amp;lRect);
    9 E& _" C- j2 i/ g4 P! G$ [lRect.NormalizeRect();' ]9 \& ]( Q2 [9 P

    " P! D' u- J5 n9 W9 R& Z9 B8 P: t//显示位图4 t3 H. y! B0 f2 a
    pStaic-&gt;GetDC()-&gt;StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRect.Height(),
    7 p# Z: f- J/ G2 d( a$ w&amp;dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
    " b. K& z: k# s! x: a' |$ zdcMem.SelectObject(&amp;poldBitmap);
    ( T: ^7 h+ a/ c( ^+ D2 z}</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

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

    很好; O  f- a8 d& U, D
    , s- F! x9 ~$ s1 B! p5 _
    但是。。。。。。。6 _) I" A# u5 X4 ?$ r/ i

    1 |1 p- U, a5 n+ t4 A# p有点乱,
    回复

    使用道具 举报

    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-1 08:34 , Processed in 0.342733 second(s), 102 queries .

    回顶部