用户操作
[即时聊天] [发私信] [加为好友]
yy ID:Y___Y
82745次访问,排名1174好友3人,关注者14
Y___Y的文章
原创 63 篇
翻译 2 篇
转载 73 篇
评论 66 篇
最近评论
zhqpl:哥们儿,这源码公式的出处是什么,对应不上啊,困扰了好久,希望能给些提示,比如:
for (j=1;j<=n-2;j++)
{
h1=x[j+1]-x[j];//ok
alpha=h0/(h0+h1);//ok
beta=(1.0-alpha)*(y[j]-y[j-1])/h0;//ok
beta=3.0*(beta+alpha……
jcchen:OpenGL view 使用ZBuffer, 如果为了实现选择功能可以从屏幕获取Z,不需要计算。

void ScreenToProj(int sx, int sy, double &px,double &py, double &pz)
{
GLdouble modelview[16];

……
yh:这。。。。。0.0 和 1.0的值都算出来了,之间的值算个插值不就行了?正投影和透视投影也不会把直线变成曲线
killer:老毛的意识形态太重,也算上大家。
但是用在现实中是一场灾难啊。
killer:老毛的意识形态太重,也算上大家。
但是用在现实中是一场灾难啊。
文章分类
收藏
    相册
    我的相册
    Opengl网站
    cg
    Nehe
    论坛
    其它
    图标资源
    优秀编程网址
    ccrun
    codeguru
    codeproject
    vckbase
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 编程技巧搜集(2)收藏

    新一篇: C++什么时候析构函数需要声明为虚函数 | 旧一篇: 编程技巧搜集(1)

    1.ComboBox中如何进行 动态查询(BCB)
    //---------------------------------------------------------------------------

    #include <vcl.h>
    #pragma hdrstop

    #include <assert.h>       //++++++++
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;

    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
    {
    }
    //===========================================================================
    //功能:检测Value 是否在Lp..Hp之间
    bool __fastcall In(int Lp, int Hp,int Value)
    {
            assert(Lp<=Hp);
            return ((Value<=Hp)&&(Value>=Lp));
    }
    //参数:一个汉字
    //返回值:该汉字的拼音
    char __fastcall GetPYChar(AnsiString HZ)
    {
    assert(HZ.Length()==2);
    WORD Hi=WORD(HZ[1])<<8;
    WORD Lo=BYTE(HZ[2]);
    int n=Hi+Lo;
    if (In(0xB0A1,0xB0C4,n)) return 'A';
    if (In(0XB0C5,0XB2C0,n)) return 'B';
    if (In(0xB2C1,0xB4ED,n)) return 'C';
    if (In(0xB4EE,0xB6E9,n)) return 'D';
    if (In(0xB6EA,0xB7A1,n)) return 'E';
    if (In(0xB7A2,0xB8c0,n)) return 'F';
    if (In(0xB8C1,0xB9FD,n)) return 'G';
    if (In(0xB9FE,0xBBF6,n)) return 'H';
    if (In(0xBBF7,0xBFA5,n)) return 'J';
    if (In(0xBFA6,0xC0AB,n)) return 'K';
    if (In(0xC0AC,0xC2E7,n)) return 'L';
    if (In(0xC2E8,0xC4C2,n)) return 'M';
    if (In(0xC4C3,0xC5B5,n)) return 'N';
    if (In(0xC5B6,0xC5BD,n)) return 'O';
    if (In(0xC5BE,0xC6D9,n)) return 'P';
    if (In(0xC6DA,0xC8BA,n)) return 'Q';
    if (In(0xC8BB,0xC8F5,n)) return 'R';
    if (In(0xC8F6,0xCBF0,n)) return 'S';
    if (In(0xCBFA,0xCDD9,n)) return 'T';
    if (In(0xCDDA,0xCEF3,n)) return 'W';
    if (In(0xCEF4,0xD188,n)) return 'X';
    if (In(0xD1B9,0xD4D0,n)) return 'Y';
    if (In(0xD4D1,0xD7F9,n)) return 'Z';
    return char(0);
    }
    //===========================================================================
    void __fastcall TForm1::ComboBox1KeyPress(TObject *Sender, char &Key)
    {
      char c;
      for(int i=0;i<ComboBox1->Items->Count;i++){
        c= GetPYChar(ComboBox1->Items->Strings[i].SubString(0,2));
        if(toupper(c)==toupper(Key)){
          Key=NULL;
          ComboBox1->ItemIndex=i;break;
          }
        }

    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      ComboBox1->Items->Clear();
      ComboBox1->Text="";
      ComboBox1->Items->Add("长沙");
      ComboBox1->Items->Add("北京");
      ComboBox1->Items->Add("武汉");
      ComboBox1->Items->Add("桂林");
    }

    2.实现重起删除文件
    ForceKiller软件中,这样描述到"此方式不是直接删除文件,因此文件不会立即被删除而是通知系统核心SMSS在下次开机时由核心自动删除!"
    实现:
    MoveFileEx(szDstFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);
    它是写入注册表,等到启动时.smss从注册表读出然后删除,之后smss才引导win32子系统.

    3.如何把一个程序加入windows防火墙的白名单

    // WindowsFirewall.h: interface for the CWindowsFirewall class.
    //
    //////////////////////////////////////////////////////////////////////

    #if !defined(AFX_WINDOWSFIREWALL_H__9F175C70_A4B7_4ECF_9A01_5B72FBE9C5C0__INCLUDED_)
    #define AFX_WINDOWSFIREWALL_H__9F175C70_A4B7_4ECF_9A01_5B72FBE9C5C0__INCLUDED_

    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    #include <netfw.h>

    //windows防火墙查询控制类。
    class CWindowsFirewall 
    {
    public:
    CWindowsFirewall();
    virtual ~CWindowsFirewall();
    HRESULT Initialize(OUT INetFwProfile** fwProfile);
    void Cleanup(IN INetFwProfile* fwProfile);
    HRESULT IsOn(IN INetFwProfile* fwProfile, OUT BOOL* fwOn);
    HRESULT TurnOn(IN INetFwProfile* fwProfile);
    HRESULT TurnOff(IN INetFwProfile* fwProfile);
    HRESULT AppIsEnabled(
    IN INetFwProfile* fwProfile,
    IN const wchar_t* fwProcessImageFileName,
    OUT BOOL* fwAppEnabled
    );
    HRESULT AddApp(
    IN INetFwProfile* fwProfile,
    IN const wchar_t* fwProcessImageFileName,
    IN const wchar_t* fwName
    );
    HRESULT PortIsEnabled(
    IN INetFwProfile* fwProfile,
    IN LONG portNumber,
    IN NET_FW_IP_PROTOCOL ipProtocol,
    OUT BOOL* fwPortEnabled
    );

    HRESULT PortAdd(
    IN INetFwProfile* fwProfile,
    IN LONG portNumber,
    IN NET_FW_IP_PROTOCOL ipProtocol,
    IN const wchar_t* name
    );

    int Test();

    };
    #endif // !defined(AFX_WINDOWSFIREWALL_H__9F175C70_A4B7_4ECF_9A01_5B72FBE9C5C0__INCLUDED_)


    ////////////////////////////////////
    // CWindowsFirewall::.cpp: implementation of the CCWindowsFirewall:: class.
    //
    //////////////////////////////////////////////////////////////////////

    #include "stdafx.h"
    #include <objbase.h>
    #include "WindowsFirewall.h"
    //#include <windows.h>
    #include <crtdbg.h>


    #include <objbase.h>
    #include <oleauto.h>
    #include <stdio.h>
    #ifdef _DEBUG
    #undef THIS_FILE
    static char THIS_FILE[]=__FILE__;
    #define new DEBUG_NEW
    #endif

    //////////////////////////////////////////////////////////////////////
    // Construction/Destruction
    //////////////////////////////////////////////////////////////////////

    CWindowsFirewall::CWindowsFirewall()
    {

    }

    CWindowsFirewall::~CWindowsFirewall()
    {

    }
    /*
        Copyright (c) Microsoft Corporation

        SYNOPSIS

            Sample code for the Windows Firewall COM interface.
    */

     

    HRESULT CWindowsFirewall::Initialize(OUT INetFwProfile** fwProfile)
    {
        HRESULT hr = S_OK;
        INetFwMgr* fwMgr = NULL;
        INetFwPolicy* fwPolicy = NULL;

        _ASSERT(fwProfile != NULL);

        *fwProfile = NULL;

        // Create an instance of the firewall settings manager.
        hr = CoCreateInstance(
                __uuidof(NetFwMgr),
                NULL,
                CLSCTX_INPROC_SERVER,
                __uuidof(INetFwMgr),
                (void**)&fwMgr
                );
        if (FAILED(hr))
        {
            printf("CoCreateInstance failed: 0x%08lx\n", hr);
            goto error;
        }

        // Retrieve the local firewall policy.
        hr = fwMgr->get_LocalPolicy(&fwPolicy);
        if (FAILED(hr))
        {
            printf("get_LocalPolicy failed: 0x%08lx\n", hr);
            goto error;
        }

        // Retrieve the firewall profile currently in effect.
        hr = fwPolicy->get_CurrentProfile(fwProfile);
        if (FAILED(hr))
        {
            printf("get_CurrentProfile failed: 0x%08lx\n", hr);
            goto error;
        }

    error:

        // Release the local firewall policy.
        if (fwPolicy != NULL)
        {
            fwPolicy->Release();
        }

        // Release the firewall settings manager.
        if (fwMgr != NULL)
        {
            fwMgr->Release();
        }

        return hr;
    }


    void CWindowsFirewall::Cleanup(IN INetFwProfile* fwProfile)
    {
        // Release the firewall profile.
        if (fwProfile != NULL)
        {
            fwProfile->Release();
        }
    }


    HRESULT CWindowsFirewall::IsOn(IN INetFwProfile* fwProfile, OUT BOOL* fwOn)
    {
        HRESULT hr = S_OK;
        VARIANT_BOOL fwEnabled;

        _ASSERT(fwProfile != NULL);
        _ASSERT(fwOn != NULL);

        *fwOn = FALSE;

        // Get the current state of the firewall.
        hr = fwProfile->get_FirewallEnabled(&fwEnabled);
        if (FAILED(hr))
        {
            printf("get_FirewallEnabled failed: 0x%08lx\n", hr);
            goto error;
        }

        // Check to see if the firewall is on.
        if (fwEnabled != VARIANT_FALSE)
        {
            *fwOn = TRUE;
            printf("The firewall is on.\n");
        }
        else
        {
            printf("The firewall is off.\n");
        }

    error:

        return hr;
    }


    HRESULT CWindowsFirewall::TurnOn(IN INetFwProfile* fwProfile)
    {
        HRESULT hr = S_OK;
        BOOL fwOn;

        _ASSERT(fwProfile != NULL);

        // Check to see if the firewall is off.
        hr = CWindowsFirewall::IsOn(fwProfile, &fwOn);
        if (FAILED(hr))
        {
            printf("CWindowsFirewall::IsOn failed: 0x%08lx\n", hr);
            goto error;
        }

        // If it is, turn it on.
        if (!fwOn)
        {
            // Turn the firewall on.
            hr = fwProfile->put_FirewallEnabled(VARIANT_TRUE);
            if (FAILED(hr))
            {
                printf("put_FirewallEnabled failed: 0x%08lx\n", hr);
                goto error;
            }

            printf("The firewall is now on.\n");
        }

    error:

        return hr;
    }

    HRESULT CWindowsFirewall::TurnOff(IN INetFwProfile* fwProfile)
    {
        HRESULT hr = S_OK;
        BOOL fwOn;

        _ASSERT(fwProfile != NULL);

        // Check to see if the firewall is on.
        hr = CWindowsFirewall::IsOn(fwProfile, &fwOn);
        if (FAILED(hr))
        {
            printf("CWindowsFirewall::IsOn failed: 0x%08lx\n", hr);
            goto error;
        }

        // If it is, turn it off.
        if (fwOn)
        {
            // Turn the firewall off.
            hr = fwProfile->put_FirewallEnabled(VARIANT_FALSE);
            if (FAILED(hr))
            {
                printf("put_FirewallEnabled failed: 0x%08lx\n", hr);
                goto error;
            }

            printf("The firewall is now off.\n");
        }

    error:

        return hr;
    }


    HRESULT CWindowsFirewall::AppIsEnabled(
                IN INetFwProfile* fwProfile,
                IN const wchar_t* fwProcessImageFileName,
                OUT BOOL* fwAppEnabled
                )
    {
        HRESULT hr = S_OK;
        BSTR fwBstrProcessImageFileName = NULL;
        VARIANT_BOOL fwEnabled;
        INetFwAuthorizedApplication* fwApp = NULL;
        INetFwAuthorizedApplications* fwApps = NULL;

        _ASSERT(fwProfile != NULL);
        _ASSERT(fwProcessImageFileName != NULL);
        _ASSERT(fwAppEnabled != NULL);

        *fwAppEnabled = FALSE;

        // Retrieve the authorized application collection.
        hr = fwProfile->get_AuthorizedApplications(&fwApps);
        if (FAILED(hr))
        {
            printf("get_AuthorizedApplications failed: 0x%08lx\n", hr);
            goto error;
        }

        // Allocate a BSTR for the process image file name.
        fwBstrProcessImageFileName = SysAllocString(fwProcessImageFileName);
        if (fwBstrProcessImageFileName == NULL)
        {
            hr = E_OUTOFMEMORY;
            printf("SysAllocString failed: 0x%08lx\n", hr);
            goto error;
        }

        // Attempt to retrieve the authorized application.
        hr = fwApps->Item(fwBstrProcessImageFileName, &fwApp);
        if (SUCCEEDED(hr))
        {
            // Find out if the authorized application is enabled.
            hr = fwApp->get_Enabled(&fwEnabled);
            if (FAILED(hr))
            {
                printf("get_Enabled failed: 0x%08lx\n", hr);
                goto error;
            }

            if (fwEnabled != VARIANT_FALSE)
            {
                // The authorized application is enabled.
                *fwAppEnabled = TRUE;

                printf(
                    "Authorized application %lS is enabled in the firewall.\n",
                    fwProcessImageFileName
                    );
            }
            else
            {
                printf(
                    "Authorized application %lS is disabled in the firewall.\n",
                    fwProcessImageFileName
                    );
            }
        }
        else
        {
            // The authorized application was not in the collection.
            hr = S_OK;

            printf(
                "Authorized application %lS is disabled in the firewall.\n",
                fwProcessImageFileName
                );
        }

    error:

        // Free the BSTR.
        SysFreeString(fwBstrProcessImageFileName);

        // Release the authorized application instance.
        if (fwApp != NULL)
        {
            fwApp->Release();
        }

        // Release the authorized application collection.
        if (fwApps != NULL)
        {
            fwApps->Release();
        }

        return hr;
    }


    HRESULT CWindowsFirewall::AddApp(
                IN INetFwProfile* fwProfile,
                IN const wchar_t* fwProcessImageFileName,
                IN const wchar_t* fwName
                )
    {
        HRESULT hr = S_OK;
        BOOL fwAppEnabled;
        BSTR fwBstrName = NULL;
        BSTR fwBstrProcessImageFileName = NULL;
        INetFwAuthorizedApplication* fwApp = NULL;
        INetFwAuthorizedApplications* fwApps = NULL;

        _ASSERT(fwProfile != NULL);
        _ASSERT(fwProcessImageFileName != NULL);
        _ASSERT(fwName != NULL);

        // First check to see if the application is already authorized.
        hr = CWindowsFirewall::AppIsEnabled(
                fwProfile,
                fwProcessImageFileName,
                &fwAppEnabled
                );
        if (FAILED(hr))
        {
            printf("CWindowsFirewall::AppIsEnabled failed: 0x%08lx\n", hr);
            goto error;
        }

        // Only add the application if it isn't already authorized.
        if (!fwAppEnabled)
        {
            // Retrieve the authorized application collection.
            hr = fwProfile->get_AuthorizedApplications(&fwApps);
            if (FAILED(hr))
            {
                printf("get_AuthorizedApplications failed: 0x%08lx\n", hr);
                goto error;
            }

            // Create an instance of an authorized application.
            hr = CoCreateInstance(
                    __uuidof(NetFwAuthorizedApplication),
                    NULL,
                    CLSCTX_INPROC_SERVER,
                    __uuidof(INetFwAuthorizedApplication),
                    (void**)&fwApp
                    );
            if (FAILED(hr))
            {
                printf("CoCreateInstance failed: 0x%08lx\n", hr);
                goto error;
            }

            // Allocate a BSTR for the process image file name.
            fwBstrProcessImageFileName = SysAllocString(fwProcessImageFileName);
            if (fwBstrProcessImageFileName == NULL)
            {
                hr = E_OUTOFMEMORY;
                printf("SysAllocString failed: 0x%08lx\n", hr);
                goto error;
            }

            // Set the process image file name.
            hr = fwApp->put_ProcessImageFileName(fwBstrProcessImageFileName);
            if (FAILED(hr))
            {
                printf("put_ProcessImageFileName failed: 0x%08lx\n", hr);
                goto error;
            }

            // Allocate a BSTR for the application friendly name.
            fwBstrName = SysAllocString(fwName);
            if (SysStringLen(fwBstrName) == 0)
            {
                hr = E_OUTOFMEMORY;
                printf("SysAllocString failed: 0x%08lx\n", hr);
                goto error;
            }

            // Set the application friendly name.
            hr = fwApp->put_Name(fwBstrName);
            if (FAILED(hr))
            {
                printf("put_Name failed: 0x%08lx\n", hr);
                goto error;
            }

            // Add the application to the collection.
            hr = fwApps->Add(fwApp);
            if (FAILED(hr))
            {
                printf("Add failed: 0x%08lx\n", hr);
                goto error;
            }

            printf(
                "Authorized application %lS is now enabled in the firewall.\n",
                fwProcessImageFileName
                );
        }

    error:

        // Free the BSTRs.
        SysFreeString(fwBstrName);
        SysFreeString(fwBstrProcessImageFileName);

        // Release the authorized application instance.
        if (fwApp != NULL)
        {
            fwApp->Release();
        }

        // Release the authorized application collection.
        if (fwApps != NULL)
        {
            fwApps->Release();
        }

        return hr;
    }

    HRESULT CWindowsFirewall::PortIsEnabled(
                IN INetFwProfile* fwProfile,
                IN LONG portNumber,
                IN NET_FW_IP_PROTOCOL ipProtocol,
                OUT BOOL* fwPortEnabled
                )
    {
        HRESULT hr = S_OK;
        VARIANT_BOOL fwEnabled;
        INetFwOpenPort* fwOpenPort = NULL;
        INetFwOpenPorts* fwOpenPorts = NULL;

        _ASSERT(fwProfile != NULL);
        _ASSERT(fwPortEnabled != NULL);

        *fwPortEnabled = FALSE;

        // Retrieve the globally open ports collection.
        hr = fwProfile->get_GloballyOpenPorts(&fwOpenPorts);
        if (FAILED(hr))
        {
            printf("get_GloballyOpenPorts failed: 0x%08lx\n", hr);
            goto error;
        }

        // Attempt to retrieve the globally open port.
        hr = fwOpenPorts->Item(portNumber, ipProtocol, &fwOpenPort);
        if (SUCCEEDED(hr))
        {
            // Find out if the globally open port is enabled.
            hr = fwOpenPort->get_Enabled(&fwEnabled);
            if (FAILED(hr))
            {
                printf("get_Enabled failed: 0x%08lx\n", hr);
                goto error;
            }

            if (fwEnabled != VARIANT_FALSE)
            {
                // The globally open port is enabled.
                *fwPortEnabled = TRUE;

                printf("Port %ld is open in the firewall.\n", portNumber);
            }
            else
            {
                printf("Port %ld is not open in the firewall.\n", portNumber);
            }
        }
        else
        {
            // The globally open port was not in the collection.
            hr = S_OK;

            printf("Port %ld is not open in the firewall.\n", portNumber);
        }

    error:

        // Release the globally open port.
        if (fwOpenPort != NULL)
        {
            fwOpenPort->Release();
        }

        // Release the globally open ports collection.
        if (fwOpenPorts != NULL)
        {
            fwOpenPorts->Release();
        }

        return hr;
    }


    HRESULT CWindowsFirewall::PortAdd(
                IN INetFwProfile* fwProfile,
                IN LONG portNumber,
                IN NET_FW_IP_PROTOCOL ipProtocol,
                IN const wchar_t* name
                )
    {
        HRESULT hr = S_OK;
        BOOL fwPortEnabled;
        BSTR fwBstrName = NULL;
        INetFwOpenPort* fwOpenPort = NULL;
        INetFwOpenPorts* fwOpenPorts = NULL;

        _ASSERT(fwProfile != NULL);
        _ASSERT(name != NULL);

        // First check to see if the port is already added.
        hr = CWindowsFirewall::PortIsEnabled(
                fwProfile,
                portNumber,
                ipProtocol,
                &fwPortEnabled
                );
        if (FAILED(hr))
        {
            printf("CWindowsFirewall::PortIsEnabled failed: 0x%08lx\n", hr);
            goto error;
        }

        // Only add the port if it isn't already added.
        if (!fwPortEnabled)
        {
            // Retrieve the collection of globally open ports.
            hr = fwProfile->get_GloballyOpenPorts(&fwOpenPorts);
            if (FAILED(hr))
            {
                printf("get_GloballyOpenPorts failed: 0x%08lx\n", hr);
                goto error;
            }

            // Create an instance of an open port.
            hr = CoCreateInstance(
                    __uuidof(NetFwOpenPort),
                    NULL,
                    CLSCTX_INPROC_SERVER,
                    __uuidof(INetFwOpenPort),
                    (void**)&fwOpenPort
                    );
            if (FAILED(hr))
            {
                printf("CoCreateInstance failed: 0x%08lx\n", hr);
                goto error;
            }

            // Set the port number.
            hr = fwOpenPort->put_Port(portNumber);
            if (FAILED(hr))
            {
                printf("put_Port failed: 0x%08lx\n", hr);
                goto error;
            }

            // Set the IP protocol.
            hr = fwOpenPort->put_Protocol(ipProtocol);
            if (FAILED(hr))
            {
                printf("put_Protocol failed: 0x%08lx\n", hr);
                goto error;
            }

            // Allocate a BSTR for the friendly name of the port.
            fwBstrName = SysAllocString(name);
            if (SysStringLen(fwBstrName) == 0)
            {
                hr = E_OUTOFMEMORY;
                printf("SysAllocString failed: 0x%08lx\n", hr);
                goto error;
            }

            // Set the friendly name of the port.
            hr = fwOpenPort->put_Name(fwBstrName);
            if (FAILED(hr))
            {
                printf("put_Name failed: 0x%08lx\n", hr);
                goto error;
            }

            // Opens the port and adds it to the collection.
            hr = fwOpenPorts->Add(fwOpenPort);
            if (FAILED(hr))
            {
                printf("Add failed: 0x%08lx\n", hr);
                goto error;
            }

            printf("Port %ld is now open in the firewall.\n", portNumber);
        }

    error:

        // Free the BSTR.
        SysFreeString(fwBstrName);

        // Release the open port instance.
        if (fwOpenPort != NULL)
        {
            fwOpenPort->Release();
        }

        // Release the globally open ports collection.
        if (fwOpenPorts != NULL)
        {
            fwOpenPorts->Release();
        }

        return hr;
    }


    int CWindowsFirewall::Test()
    {
        HRESULT hr = S_OK;
        HRESULT comInit = E_FAIL;
        INetFwProfile* fwProfile = NULL;

        // Initialize COM.
        comInit = CoInitializeEx(
                    0,
                    COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE
                    );

       // Ignore RPC_E_CHANGED_MODE; this just means that COM has already been
       // initialized with a different mode. Since we don't care what the mode is,
       // we'll just use the existing mode.
       if (comInit != RPC_E_CHANGED_MODE)
       {
            hr = comInit;
            if (FAILED(hr))
            {
                TRACE("CoInitializeEx failed: 0x%08lx\n", hr);
                goto error;
            }
       }

        // Retrieve the firewall profile currently in effect.
        hr = CWindowsFirewall::Initialize(&fwProfile);
        if (FAILED(hr))
        {
            TRACE("CWindowsFirewall::Initialize failed: 0x%08lx\n", hr);
            goto error;
        }

        // Turn off the firewall.
    //     hr = CWindowsFirewall::TurnOff(fwProfile);
    //     if (FAILED(hr))
    //     {
    //         TRACE("CWindowsFirewall::TurnOff failed: 0x%08lx\n", hr);
    //         goto error;
    //     }
    //
    //     // Turn on the firewall.
    //     hr = CWindowsFirewall::TurnOn(fwProfile);
    //     if (FAILED(hr))
    //     {
    //         TRACE("CWindowsFirewall::TurnOn failed: 0x%08lx\n", hr);
    //         goto error;
    //     }

        // Add Windows Messenger to the authorized application collection.
         hr = CWindowsFirewall::AddApp(
                 fwProfile,
                 L"%ProgramFiles%\\Messenger\\msmsgs.exe",
                 L"Windows Messenger"
                 );
         if (FAILED(hr))
         {
             TRACE("CWindowsFirewall::AddApp failed: 0x%08lx\n", hr);
             goto error;
         }

     

    error:

        // Release the firewall profile.
        CWindowsFirewall::Cleanup(fwProfile);

        // Uninitialize COM.
        if (SUCCEEDED(comInit))
        {
            CoUninitialize();
        }

        return 0;
    }

    4.C语言中怎样判断汉字
    其实判断汉字的代码很简单,简单到只有一行就可以了,但不理解汉字编码的基础,这一行代码却万万无法理解。

    常用的字符编码有以下三种:
    1、ASCII 只支持英文,全部为8位
    2、DBCS  支持英文和中文,但中文需要两个字节(16位)
    3、UNICODE 支持英文和中文,英文和中文都需要两个字节

    ASCII是DOS时代的,无法支持中文。DBCS是Win9x支持的字符集。UNICODE是win2k和xp支持的字符集。
    而汉字的编码目前有GB2312-1980和GB18030-2000,GB2312就是DBCS类型的汉字编码,GB18030就是UNICODE的汉字编码,当然GB18030兼容GB2312,也就是说GB18030也支持DBCS的字符处理方式。虽然GB18030是2000年后强制执行的国家标准,但目前使用最多的还是GB2312编码,而且GB2312也足够处理你所用到的汉字了。还有GBK编码是GB2312的增强版。

    这里我仅支持GB2312。由于GB2312是中国大陆制定的标准,所以繁体中文并不在GB2312的编码中,如果你的程序需要支持繁体中文,则还需要处理Big5编码。其实也很简单。

    下面说一下在C中如何处理GB2312编码的汉字。以VC6.0为例,如果声明变量的类型为wchar_t则是UNICODE编码,如果是char则是DBCS编码比如我的一个函数声明是:
    void Justify (HDC hdc, PTSTR pText, RECT * prc, int iAlign)   
    其中的pText是PTSTR类型,PTSTR在WINNT.H中有两个定义(WINNT.H中的这段代码我删掉了中间无关的部分)
    #ifdef  UNICODE
    typedef LPWSTR PTSTR, LPTSTR;//如果是UNICODE编码,则定义PTSTR为LPWSTR类型
    #else
    typedef LPSTR PTSTR, LPTSTR;//如果是不是UNICODE编码,则定义PTSTR为LPSTR类型
    #endif

    LPSTR定义为CHAR的指针
    LPSWSTR定义为WCHAR的指针
    CHAR定义为char类型
    WCHAR定义为wchar_t类型
    而wchar_t定义为unsigned short类型,它是16位,两个字节,无符号短整数

    是UNICODE还是非UNICODE取决于你的编译选项,如果在[工程]-[选项]-[C/C++]的[预处理程序定义]中填入了_UNICODE,那么程序会用wchar_t指针来定义LPSTR,如果没有_UNICODE,那么程序会用char指针来定义LPSTR,这样带来的区别就是,你接受到的pText中的字节内容是不一样的,[i服了you]这个字串如果在没有定义_UNICODE的情况下,是8个字节,而在定义了_UNICODE的情况下是12个字节。反映到程序中就是,如果没有定义_UNICODE,那么就要把英文字符当成1个字节来处理,而汉字字符的编码是采用GB2312编码规范来的;如果定义了_UNICODE,那么英文字符要当成2个字节来处理,而汉字字符的编码是采用UNICODE编码来的。举例来说,win98不采用UNICODE编码而采用的是DBCS编码,为了让我的程序既可以在XP下运行又可以在Win98下运行,我没有定义_UNICODE。这样我的程序代码就要把字符串当成DBCS编码来处理,也就是英文字符是1个字节,中文字符是2个字节,中文编码采用GB2312编码。用Justify来说明:
    我给pText传递来[你]这个汉字,那么pText应该有两个字节来存放[你]这个字,设置段点来读一下pText的内容。
    void Justify (HDC hdc, PTSTR pText, RECT * prc, int iAlign)
    {
    static TCHAR szText[] = {TEXT ("你")} ;

    pText=szText;
    }
    设断调试会发现*pText=-60,怎么会这样呢,原因是没有按unsigned char来转换*pText的值,修改代码如下:
    void Justify (HDC hdc, PTSTR pText, RECT * prc, int iAlign)
    {
    static TCHAR szText[] = {TEXT ("你")} ;
    unsigned char sqChar[20];//这个变量就是为了强制转换类型用的

    pText=szText;
    sqChar[0]=*pText;
    sqChar[1]=*(pText+1);
    }
    这时下断查看sqChar[0]=196,sqChar[1]=227就对了,为什么呢,因为它和GB2312的编码是一样的。
    GB2312-80编码的编码范围是高位0xa1-0xfe,低位是 0xa1-0xfe ,其中汉字范围为 0xb0a1 和 0xf7fe,如果只是简单地判断汉字,则只要查看高字节是否大于等于0xa1就可以了,还有就是,全角字符的高字节统统等于0xa3,所以很容易可以区别出全角字符来。

    如果你希望你的程序能支持到GB18030,那么就去找GB18030的规范来看看。

    网上有很多判断汉字的说法,你只要记住,你要支持的编码是哪个?GB2312、GBK、GB18030?每个编码有自己的编码范围或者规范,网上之所以有不同的说法,正是因为他们互相说的不是同一种编码方式。我这里说的是GB2312的编码,如果你的程序要编译成支持UNICODE的话,那么这段代码就要修改成对应UNICODE规范的代码了。

    附简单的测试汉字、全角字符、英文的程序:

    //test.c
    //源代码作者:夏克 sequh@126.com
    //新建Win32 Application工程,把test.c加入,运行,试着修改szText的值,来观察代码效果

    #include <windows.h>

    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
    PSTR szCmdLine, int iCmdShow)
    {
    static TCHAR szText[] = {TEXT ("i服,了。uy")} ;
    PTSTR pText;
    int i;
    unsigned char sqChar[20];

    pText=szText;
    while (*pText != '\0')
    {
    i=IsGB(pText);

    switch(i)
    {
    case 0:
    pText++;
    MessageBox (NULL, TEXT ("发现数字、英文字符或英文标点"), TEXT ("Hello"), 0);
    break;
    case 1:
    pText++;
    pText++;
    MessageBox (NULL, TEXT ("发现全角字符"), TEXT ("Hello"), 0);
    break;
    case 2:
    pText++;
    pText++;
    MessageBox (NULL, TEXT ("发现汉字"), TEXT ("Hello"), 0);
    break;
    }
    }

    return 0 ;
    }

    int IsGB(PTSTR pText)
    {
    unsigned char sqChar[20];
    sqChar[0]=*pText;
    if (sqChar[0]>=0xa1)
    if (sqChar[0]==0xa3)
    return 1;//全角字符
    else
    return 2;//汉字
    else
    return 0;//英文、数字、英文标点
    }

    5.怎么把界面弹到最上层
    在ShowWindow(SW_SHOW)后加入

    SetForegroundWindow();

    6.文件关联怎样做
    修改注册表  
      例子:  
       
      HKEY_CLASSES_ROOT   键下  
      [HKEY_CLASSES_ROOT\.mp3]  
      @="Mp3Player"  
       
      [HKEY_CLASSES_ROOT\Mp3Player]  
      @="Mp3Player"  
       
      //图标  
      [HKEY_CLASSES_ROOT\AudioDecoder\defaultIcon]  
      @="C:\\Mp3Player.EXE,1"  
       
       
      [HKEY_CLASSES_ROOT\AudioDecoder\Shell]  
       
      [HKEY_CLASSES_ROOT\AudioDecoder\Shell\open]  
       
      //   打开的程序  
      [HKEY_CLASSES_ROOT\AudioDecoder\Shell\open\command]  
      @="Mp3Player.EXE   %1"

    在CMyApp::InitInstance()中加入或修改以下代码  
      EnableShellOpen();  
      RegisterShellFileTypes(TRUE);  
      CCommandLineInfo   cmdInfo;  
      ParseCommandLine(cmdInfo);  
      if(!ProcessShellCommand(cmdInfo))  
      return   FALSE;  
       
      在以下代码以前  
      pMainFrame->ShowWindow(SW_SHOWMAXIMIZED);  
      pMainFrame->UpdateWindow();  

    7.如何通过HTTP下载一个文件
    #include <Urlmon.h>
    #pragma comment( lib, "Urlmon.lib")

    URLDownloadToFile(0, "http://www.abc.com/abc.exe", "c:\\abc.exe", 0, 0);

    8.复制位图到剪贴板
    复制一幅位图到剪贴板相当简单,需要记住的一个是如果位图需要调色盘,
    你应当将调色盘也复制。

    函数一:复制设备相关位图到剪贴板

    CopyBitmapToClipboard()函数复制一幅DDB位图到剪贴板,如果提供调色盘它将
    同时复制调色盘。注意在最后调用Detach()。这一点很重要,因为此时GDI对象
    的物主已经传送至剪贴板。

    // CopyBitmapToClipboard- Copies a device-dependent bitmap to clipboard
    // pWnd- Pointer to window that opens the clipboard
    // bitmap- The device-dependent bitmap
    // pPal- Pointer to logical palette - Can be NULL
    // NOTE- GDI objects are detached from bitmap & pPal
    //  as the clipboard owns them after the copy
    void CopyBitmapToClipboard( const CWnd *pWnd, CBitmap& bitmap, CPalette* pPal )
    {
     ::OpenClipboard(pWnd->GetSafeHwnd());
     ::EmptyClipboard() ;
     if( pPal )
      ::SetClipboardData (CF_PALETTE, pPal->GetSafeHandle() ) ;
     ::SetClipboardData (CF_BITMAP, bitmap.GetSafeHandle() ) ;
     ::CloseClipboard () ;
     bitmap.Detach();
     if( pPal )
      pPal->Detach();
    }
    函数二:复制设备无关位图到剪贴板

    CopyDIBToClipboard()函数和CopyBitmapToClipboard()非常相似。内存句柄包
    含了BITMAPINFO 和位图的位信息,通过GlobalAlloc()分配。

    // CopyDIBToClipboard- Copies a device-dependent bitmap to clipboard
    // pWnd- Pointer to window that opens the clipboard
    // hDIB- Memory handle that contains BITMAPINFO & bitmap bits
    // pPal- Pointer to logical palette - Can be NULL
    // NOTE- GDI objects are detached from bitmap & pPal
    //  as the clipboard owns them after the copy
    void CopyDIBToClipboard( const CWnd *pWnd, HGLOBAL hDIB, CPalette* pPal )
    {
     ::OpenClipboard(pWnd->GetSafeHwnd());
     ::EmptyClipboard();
     if( pPal )
      ::SetClipboardData (CF_PALETTE, pPal->GetSafeHandle() ) ;
     ::SetClipboardData (CF_DIB, hDIB ) ;
     ::CloseClipboard () ;
     bitmap.Detach();
     if( pPal )
      pPal->Detach();
    }

    函数三:复制一幅windows图象到剪贴板

    void CopyWndToClipboard( CWnd *pWnd )
    {
     CBitmap bitmap;
     CClientDCdc(pWnd);
     CDC memDC;
     CRectrect;
     
     memDC.CreateCompatibleDC(&dc);
     
     pWnd->GetWindowRect(rect);
     
     bitmap.CreateCompatibleBitmap(&dc, rect.Width(),rect.Height() );
     
     CBitmap* pOldBitmap = memDC.SelectObject(&bitmap);
     memDC.BitBlt(0, 0, rect.Width(),rect.Height(), &dc, 0, 0, SRCCOPY);
     
     pWnd->OpenClipboard() ;
     EmptyClipboard() ;
     SetClipboardData (CF_BITMAP, bitmap.GetSafeHandle() ) ;
     CloseClipboard () ;
     
     memDC.SelectObject(pOldBitmap);
     bitmap.Detach();
    }
    使用CopyBitmapToClipboard(this,CBitmap::FromHandle(hBitmap),pPal);

    9.检测internet连线状态
    在线返回 TRUE, 掉线返回 FALSE。遍历系统中所有 RAS 连接判断连接情况。Win2K/98 VC6 通过
    BOOL GetConnectState()
    {
     
     LPRASCONN lpRasConn = NULL;
     DWORD cbBuf = 0;
     DWORD cConn = 0;
     DWORD dwRet = 0;
     HRASCONN hrasconn;
     RASCONNSTATUS rasStatus;
     UINT ndx;
     
     // enumerate connections
     cbBuf = sizeof(RASCONN);
     
     if ( (lpRasConn = ( LPRASCONN ) malloc((UINT)cbBuf)) != NULL)
     {
      lpRasConn->dwSize = sizeof( RASCONN );
      dwRet = RasEnumConnections( lpRasConn, &cbBuf, &cConn );
      for (ndx = 0; ndx < cConn; ndx++)
      {
       // get to HRASCONN
       hrasconn = lpRasConn[ndx].hrasconn;
       // get connection status
       rasStatus.dwSize = sizeof(RASCONNSTATUS);
       dwRet = RasGetConnectStatus( hrasconn, &rasStatus );
       if ( dwRet )
        return 0;
       else
       {
        if (rasStatus.rasconnstate == RASCS_Connected)
         return 1;
        else return 0;
       }
      }
     }
     else
     {
      return 0;
     }
     
    }
     

    发表于 @ 2007年03月22日 13:56:00|评论(loading...)|编辑

    新一篇: C++什么时候析构函数需要声明为虚函数 | 旧一篇: 编程技巧搜集(1)

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © Y___Y