zoukankan      html  css  js  c++  java
  • windows程序开发中c++和c#的对照

     有的选项可能仅提供C++和Windows Platform SDK中的方法(API):
    (1)将窗口设为顶层窗口:
           c++:
            //[注意]:BringWindowToTop( hwnd )不会使窗口成为TopMost窗口!
            SetWindowPos(hDlg,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE); //忽略x,y,cx,cy参数

           c#:
            form1.TopMost=true;
    (2)设置窗口透明度:
        //将窗口设置为图层窗口样式
        SetWindowLong(hDlg,GWL_EXSTYLE, GetWindowLong(hDlg, GWL_EXSTYLE) | WS_EX_LAYERED);
        //设置alpha值,从0~255
       BYTE alpha=200;
       SetLayeredWindowAttributes(hDlg,0, alpha, LWA_ALPHA);

    (3)已知一个窗口句柄,获取窗口所在程序的HINSTANCE:
    HINSTANCE hInstance = (HINSTANCE)GetWindowLong(m_hParentWnd, GWL_HINSTANCE);

    (4)获取光标位置:
           BOOL GetCursorPos(LPPOINT lpPoint);

    (5)使对话框中的某个TextBox(或其他控件)具有输入焦点:
            HWND SetFocus(HWND hWnd);
           如果该方法不能工作,则可以模拟发送一个鼠标点击的消息给该控件:
            PostMessage(hWnd, WM_LBUTTONDOWN, 0, 0);//表示于客户区坐标(0,0)处单击
            PostMessage(hWnd, WM_LBUTTONUP, 0, 0);

    (6)使对话框定时关闭:
           在对话框窗口过程中,在对话框初始化消息分支中安装和设定一个定时器,在WM_TIMER消息分支中调用EndDialog。

    (7)使一个菜单灰化或者重新使能:
        设置:BOOL EnableMenuItem(HMENU hMenu, UINT uIDEnableItem, UINT uEnable);
        查询:UINT GetMenuState(HMENU hMenu, UINT uId, UINT uFlags);
    (8)获取对话框中的CheckBox是否被选中,设置CheckBox的状态:

            查询:if ( IsDlgButtonChecked(hDlg, nIDButton) == BST_CHECKED) ...
            设置:BOOL CheckDlgButton(HWND hDlg, int nIDButton, UINT uCheck);

    (9)获取对话框中的文本输入框填写的数字:
            UINT GetDlgItemInt(
                   HWND hDlg,
                   int nIDDlgItem,
                   BOOL *lpTranslated,  //告知调用方是否转换成功
                   BOOL bSigned          //是否需要考虑负号。
                   );

           获取对话框控件的文本:
           UINT GetDlgItemText(      
                HWND hDlg,
                int nIDDlgItem,
                LPTSTR lpString,
                int nMaxCount
                );

    (10)如何处理对话框中的TreeView控件的选择节点变化,节点展开,节点折叠等事件:
             对话框中的控件上发生事件时,通常会给它们的父窗口发送WM_NOTIFY消息。    

             LRESULT OnNotify(WORD uMsg, WORD wParam, LONG lParam, BOOL& bHandled)
             {

                           LPNMHDR hdr=(LPNMHDR)lParam;
             /*
              code
                    Notification code. This member can be a control-specific notification code or it
                    can be one of the common notification codes. 
             */
                             
    if(hdr->code==TVN_SELCHANGED)
                             {
                                   //树节点发生改变
                              }
                             else if(hdr->code==TVN_ITEMEXPANDED)
                            {
                                    LPNMTREEVIEW pnmtv = (LPNMTREEVIEW) lParam;
                                   /*
                                    #define TVE_COLLAPSE            0x0001
                                   #define TVE_EXPAND              0x0002
                                   #define TVE_TOGGLE              0x0003
                                    */
                               }
                               return 0;
                        }

    (11)如果计算SYSTEMTIME加上一段时间后的SYSTEMTIME:
    Code_AddSeconds

    (12)获取用户最近一次鼠标键盘输入到现在的时间(用户离开电脑的时间):

        LASTINPUTINFO lastInput;

        lastInput.cbSize = sizeof(lastInput);  //important,donot forget!

        GetLastInputInfo(&lastInput);

              DWORD dwTicksSinceLastInput   = GetTickCount() - lastInput.dwTime;   (单位:毫秒)

          备注:GetTickCount:获取自开机到现在的毫秒数。

    (13)防止一个程序运行多个进程实例:通过创建mutex对象来判断当前是否已经有进程在运行;
    Code_Mutex
    (14)控制窗口是否在任务栏显示一个按钮

        a. 通过设定对话框的样式实现:

        显示:创建一个没有OWNER的窗口,并设置WS_EX_APPWINDOW 扩展样式;
        不显示:创建一个没有OWNER的窗口,并设置WS_EX_TOOLWINDOW 扩展样式;

        b. 通过任务栏的COM对象来实现:

    Code_TaskbarList

     
    (15)如何在通知栏(System Notify Area)放置一个图标(NotifyIcon):

    Code_Shell_NotifyIcon

     (16)如何关闭或者注销计算机:
    用户进程启动以后通常不具有关机权限,因此要关闭计算机,首先需要调整我们的进程的权限,获取关机权限:

    Code_ExitWindowsEx

    (17)如何在注册表中写入一个键值:

    Code_RegSetValueEx
  • 相关阅读:
    Enterprise Library 3.0 – April 2007 Released
    Static methods can not be called remotely
    BizTalk: 提高 BizTalk 编程能力的 8 点技巧和窍门(MSDN Magazine)
    Calling Stored Procedures Using the SQL Adapter
    BizTalk: Difference between (PassThruReceive, PassThruSend) and (XmlReceive, XmlSend) Biztalk Pipelines (For Beginners)
    BizTalk Exception: Cannot access a disposed object && Failed to serialize the message part "BankQuoteRequest" into the type "BankQuoteRequest"
    Oneway web service call in BizTalk Orchestration
    Create route in crossserver SSB
    BizTalk: PublisherSubscriber model and Binding
    BizTalk Exception: Calling web services with Mixed OneWay and SolicitResponse Operations
  • 原文地址:https://www.cnblogs.com/hoodlum1980/p/1235669.html
Copyright © 2011-2022 走看看