用户操作
[即时聊天] [发私信] [加为好友]
yyID:Y___Y
85998次访问,排名1182,好友3人,关注者16人。
Y___Y的文章
原创 63 篇
翻译 2 篇
转载 73 篇
评论 68 篇
最近评论
XY_dapro:朋友,这个转走了!
逐客令:哈哈
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的值都算出来了,之间的值算个插值不就行了?正投影和透视投影也不会把直线变成曲线
文章分类
收藏
    相册
    我的相册
    Opengl网站
    cg
    Nehe
    论坛
    其它
    图标资源
    优秀编程网址
    ccrun
    codeguru
    codeproject
    vckbase
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

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

    新一篇: 编程技巧搜集(2) | 旧一篇: 如何在Windows2000中动态禁用/启用Ctrl-Alt-Delete

    0.纯SDK实现的托盘类
    /**********************************************************************
    * File Name: TrayIcon.cpp
    * Module Name: CTrayIcon
    * Copyright (C) by LQ messager
    * Description: System taskbar tray icon control
    * Author: LiJun
    * Create Data: 2005-11-18  Update Data: 2006-11-16
    * E-Mail: mailto:notoldtree@126.com
    *
    * NOTE: WIN32 SDK edition
    *********************************************************************/
    #include "StdAfx.h"
    #include <shellapi.h>
    #pragma comment(lib, "shell32.lib")

    #pragma once

    class CTrayIcon
    {
    public:
     CTrayIcon();
     ~CTrayIcon();
     // Set notify message window
     BOOL SetNotifyWnd(HWND hWnd, UINT nMessage);
     BOOL SetIcon(HICON hIcon);// Set tray icon
     BOOL SetIcon(UINT nID);// Set tray icon by resource
     HICON GetIcon() const;// Get tray icon handle
     
     BOOL SetToolTip(LPCTSTR lpszText);// Set tooltip text
     BOOL SetToolTip(UINT nID);// Set tooltip text by resource
     UINT GetToolTip(LPTSTR lpszText, int nLength) const;// Get tooltip text
     
    #if (_WIN32_IE >= 0x0500)
     BOOL SetBalloonTip(LPCTSTR lpszTitle, LPCTSTR lpszMsg, UINT nTimeout=3000);
     BOOL GetBalloonTip(LPTSTR lpszTitle, LPTSTR lpszMsg, UINT* pTimeout) const;
    #endif
     BOOL ShowTray(BOOL bShow);
    private:
     NOTIFYICONDATA m_nid;
    };

    CTrayIcon::CTrayIcon()
    {
     memset(&m_nid, 0, sizeof(NOTIFYICONDATA));
     m_nid.cbSize = sizeof(NOTIFYICONDATA);
    }

    CTrayIcon::~CTrayIcon()
    {
     ShowTray(FALSE);
    }

    BOOL CTrayIcon::SetNotifyWnd(HWND hWnd, UINT nMessage)
    {
     if(!::IsWindow(hWnd))
      return FALSE;
     m_nid.hWnd = hWnd;
     
     if(nMessage > 0)
     {
      m_nid.uCallbackMessage = nMessage;
      if(!(m_nid.uFlags & NIF_MESSAGE))
       m_nid.uFlags |= NIF_MESSAGE;
     }
     else
     {
      m_nid.uCallbackMessage = 0;
      if(m_nid.uFlags & NIF_MESSAGE)
       m_nid.uFlags &= ~NIF_MESSAGE;
     }
     return Shell_NotifyIcon(NIM_ADD, &m_nid);
    }

    BOOL CTrayIcon::SetIcon(HICON hIcon)
    {
     ASSERT(hIcon != NULL);
     
     if(!(m_nid.uFlags & NIF_ICON))
      m_nid.uFlags |= NIF_ICON;
     
     m_nid.hIcon = hIcon;
     
     return Shell_NotifyIcon(NIM_MODIFY, &m_nid);
    }

    BOOL CTrayIcon::SetIcon(UINT nID)
    {
     return SetIcon(::LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(nID)));
    }

    HICON CTrayIcon::GetIcon() const
    {
     return m_nid.hIcon;
    }

    BOOL CTrayIcon::SetToolTip(LPCTSTR lpszText)
    {
     if(!(m_nid.uFlags & NIF_TIP))
      m_nid.uFlags |= NIF_TIP;
     lstrcpy(m_nid.szTip, lpszText);
     
     return Shell_NotifyIcon(NIM_MODIFY,&m_nid);
    }

    BOOL CTrayIcon::SetToolTip(UINT nID)
    {
     TCHAR szText[128];
     ::LoadString(GetModuleHandle(NULL), nID, szText, 128);
     return SetToolTip(szText);
    }

    UINT CTrayIcon::GetToolTip(LPTSTR lpszText, int nLength) const
    {
     lstrcpy(lpszText, m_nid.szTip);
     return lstrlen(lpszText);
    }

    #if (_WIN32_IE >= 0x0500)
    BOOL CTrayIcon::SetBalloonTip(LPCTSTR lpszTitle, LPCTSTR lpszMsg, UINT nTimeout/*=3000*/);

    {
     if(!(m_nid.uFlags & NIF_INFO))
      m_nid.uFlags |= NIF_INFO;
     m_nid.uTimeout = nTimeout;
     lstrcpy(m_nid.szInfoTitle, lpszTitle);
     lstrcpy(m_nid.szInfo, lpszMsg);
     
     return Shell_NotifyIcon(NIM_MODIFY, &m_nid);
    }
    #endif

    #if (_WIN32_IE >= 0x0500)
    BOOL CTrayIcon::GetBalloonTip(LPTSTR lpszTitle, LPTSTR lpszMsg, UINT* pTimeout) const
    {
     lstrcpy(lpszTitle, m_nid.szInfoTitle);
     lstrcpy(lpszMsg, m_nid.szInfo);
     *pTimeout = m_nid.uTimeout;
     return TRUE;
    }
    #endif

    BOOL CTrayIcon::ShowTray(BOOL bShow)
    {
     return Shell_NotifyIcon( bShow ? NIM_ADD : NIM_DELETE, &m_nid );
    }
    1.改变CToolTipCtrl提示信息时间
    SendMessage(hWndTooltip,TTM_SETDELAYTIME,(WPARAM)(DWORD)TTDT_INITIAL,(LPARAM)(INT) MAKELONG(250,0));

    2.判断操作系统版本
    //console方式编译运行
    #include <windows.h>
    #include <stdio.h>

    BOOL DisplaySystemVersion()
    {
     OSVERSIONINFOEX osvi;
     BOOL bOsVersionInfoEx;
     
     // Try calling GetVersionEx using the OSVERSIONINFOEX structure.
     //
     // If that fails, try using the OSVERSIONINFO structure.
     
     ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
     osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
     
     if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
     {
      // If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO.
      
      osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
      if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) )
       return FALSE;
     }
     
     switch (osvi.dwPlatformId)
     {
     case VER_PLATFORM_WIN32_NT:
      
      // Test for the product.
      
      if ( osvi.dwMajorVersion <= 4 )
                printf("Microsoft Windows NT ");
      
      if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
                printf ("Microsoft Windows 2000 ");
      
      if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
                printf ("Microsoft Windows XP ");
      
      // Test for product type.
      
      if( bOsVersionInfoEx )
      {
       if ( osvi.wProductType == VER_NT_WORKSTATION )
                  {
        if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
         printf ( "Personal " );
        else
         printf ( "Professional " );
       }
       else if ( osvi.wProductType == VER_NT_SERVER )
       {
        if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
         printf ( "DataCenter Server " );
        else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
         printf ( "Advanced Server " );
        else
         printf ( "Server " );}
       }
      else
      {
       HKEY hKey;
       char szProductType[80];
       DWORD dwBufLen;
       
       RegOpenKeyEx( HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Control\\ProductOptions",0, KEY_QUERY_VALUE, &hKey );
       RegQueryValueEx( hKey, "ProductType", NULL, NULL,(LPBYTE) szProductType, &dwBufLen);
       RegCloseKey( hKey );
       if ( lstrcmpi( "WINNT", szProductType) == 0 )
        printf( "Professional " );
       if ( lstrcmpi( "LANMANNT", szProductType) == 0 )
        printf( "Server " );
       if ( lstrcmpi( "SERVERNT", szProductType) == 0 )
        printf( "Advanced Server " );
      }
      
      // Display version, service pack (if any), and build number.
      
      if ( osvi.dwMajorVersion <= 4 )
      {
        printf ("version %d.%d %s (Build %d)\n",
        osvi.dwMajorVersion,
        osvi.dwMinorVersion,
        osvi.szCSDVersion,
        osvi.dwBuildNumber & 0xFFFF);
      }
      else
      {
                  printf ("%s (Build %d)\n",
        osvi.szCSDVersion,
        osvi.dwBuildNumber & 0xFFFF);
      }
      break;
      
     case VER_PLATFORM_WIN32_WINDOWS:
      
      if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
      {
       printf ("Microsoft Windows 95 ");
       if ( osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B' )
                    printf("OSR2 " );
      }
      
      if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
      {
       printf ("Microsoft Windows 98 ");
       if ( osvi.szCSDVersion[1] == 'A' )
                    printf("SE " );
      }
      
      if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
      {
       printf ("Microsoft Windows Me ");
      }
      break;
      
     case VER_PLATFORM_WIN32s:
      
      printf ("Microsoft Win32s ");
      break;
     }
     return TRUE;
    }

    int main()
    {
     DisplaySystemVersion();
    }

    3.更改系统日期格式
    char buff[]="yyyy-MM-dd";
    SetLocaleInfo(LOCALE_SYSTEM_DEFAULT,LOCALE_SSHORTDATE ,buff);

    4.检测电脑最后一次输入
    BOOL GetLastInputInfo( PLASTINPUTINFO plii);

    5.获得汉字字符串拼音首字母
    #include "stdio.h"
    #include "string.h"
    #define TBYTE unsigned char

    void FirstLetter(int nCode, char& strRet);
    void GetFirstLetter(char* strName, char* strFirstLetter)
    {
        TBYTE ucHigh, ucLow;
        int  nCode;
        char strRet;
     memset(strFirstLetter, 0, sizeof(strFirstLetter));
     int i;
     int len = 0;
        for (i=0; i < (int)strlen(strName); i++)
        {
            if ((TBYTE)strName[i] < 0x80)
                continue;
      
            ucHigh = (TBYTE)strName[i];
            ucLow  = (TBYTE)strName[i+1];
            if ( ucHigh < 0xa1 || ucLow < 0xa1)
                continue;
            else
                // Treat code by section-position as an int type parameter,
                // so make following change to nCode.
                nCode = (ucHigh - 0xa0) * 100 + ucLow - 0xa0;
      
            FirstLetter(nCode, strRet);
      strFirstLetter[len] = strRet;
            i++;
      len++;
        }
     strFirstLetter[len] = 0;
    }

    void FirstLetter(int nCode, char& strLetter)
    {
     if(nCode >= 1601 && nCode < 1637) strLetter = 'A';
     if(nCode >= 1637 && nCode < 1833) strLetter = 'B';
     if(nCode >= 1833 && nCode < 2078) strLetter = 'C';
     if(nCode >= 2078 && nCode < 2274) strLetter = 'D';
     if(nCode >= 2274 && nCode < 2302) strLetter = 'E';
     if(nCode >= 2302 && nCode < 2433) strLetter = 'F';
     if(nCode >= 2433 && nCode < 2594) strLetter = 'G';
     if(nCode >= 2594 && nCode < 2787) strLetter = 'H';
     if(nCode >= 2787 && nCode < 3106) strLetter = 'J';
     if(nCode >= 3106 && nCode < 3212) strLetter = 'K';
     if(nCode >= 3212 && nCode < 3472) strLetter = 'L';
     if(nCode >= 3472 && nCode < 3635) strLetter = 'M';
     if(nCode >= 3635 && nCode < 3722) strLetter = 'N';
     if(nCode >= 3722 && nCode < 3730) strLetter = 'O';
     if(nCode >= 3730 && nCode < 3858) strLetter = 'P';
     if(nCode >= 3858 && nCode < 4027) strLetter = 'Q';
     if(nCode >= 4027 && nCode < 4086) strLetter = 'R';
     if(nCode >= 4086 && nCode < 4390) strLetter = 'S';
     if(nCode >= 4390 && nCode < 4558) strLetter = 'T';
     if(nCode >= 4558 && nCode < 4684) strLetter = 'W';
     if(nCode >= 4684 && nCode < 4925) strLetter = 'X';
     if(nCode >= 4925 && nCode < 5249) strLetter = 'Y';
     if(nCode >= 5249 && nCode < 5590) strLetter = 'Z';
    }

    void main()
    {
     char strName[10], strRes[5];
        strcpy(strName, "汗!瀑布汗!");
     memset(strRes, 0, sizeof(strRes));
        GetFirstLetter(strName, strRes);
     printf("%s\n", strRes);
    }

    6.消除窗口子控件在窗体大小改变时的闪烁
    在create窗口的时候类型加上WS_CLIPCHILDREN

    7.读取大于2G的文件
    __int64 myFileSeek (HANDLE hf, __int64 distance, DWORD MoveMethod)
    {
       LARGE_INTEGER li;

       li.QuadPart = distance;

       li.LowPart = SetFilePointer (hf,
                                    li.LowPart,
                                    &li.HighPart,
                                    MoveMethod);

       if (li.LowPart == INVALID_SET_FILE_POINTER && GetLastError()
           != NO_ERROR)
       {
          li.QuadPart = -1;
       }

       return li.QuadPart;
    }

    8.操作控制台
    GetConsoleScreenBufferInfo
     返回窗口大小、屏幕缓冲区大小和颜色属性
     
    SetConsoleWindowInfo
     改变控制台窗口的大小
     
    SetConsoleScreenBufferSize
     该表控制台屏幕缓冲区的大小
     
    SetConsoleTextAttribute
     设置颜色属性
     
    SetConsoleTitle
     设置控制台窗口的标题
     
    GetConsoleTitle
     获得控制窗口的标题
     

    进程可以使用 FreeConsole 函数来分离继承的控制台或通过 AllocConsole 创建的控制台。

    9.清空回收站
    SHEmptyRecycleBin(NULL, NULL,SHERB_NOCONFIRMATION |SHERB_NOPROGRESSUI | SHERB_NOSOUND);

    10.获得一段时间内cpu的晶振次数
    在Intel   Pentium以上级别的CPU中,有一个称为“时间戳(Time   Stamp)”的部件,它以64位无符号整型数的格式,记录了自CPU上电以来所经过的时钟周期数。
    inline   unsigned   __int64   GetCycleCount()  
    {  
        __asm   RDTSC  
    }

    11.提高应用程序权限
    windows应用程序好像不能提高自身的权限,但它有一个未公开的函数:CreateProcessWithLogonW,它可以用administrator身份运行一个进程
    CreateProcessWithLogonW API的定义如下:
    BOOL CreateProcessWithLogonW(
    LPCWSTR , // 用户乙的账号(Account)
    LPCWSTR , //用户乙的域(Domain)
    LPCWSTR , // 用户乙的密码(Password)
    DWORD , // logon option
    LPCWSTR , // executable module name
    LPWSTR , // command-line string
    DWORD , // creation flags
    LPVOID , // new environment block
    LPCWSTR , // current directory name
    LPSTARTUPINFOW , // startup information
    LPPROCESS_INFORMATION // process information
    );
    另外,你也可用命令行的:runas
    如:  
      runas   /env   /user:user@domain.microsoft.com   "notepad   \"my   file.txt\""  

    =================================================================
    有关 CreateProcessWithLogonW 参考:
    http://blog.csdn.net/wxjgeorge/archive/2005/04/15/349601.aspx

    12.枚举一个进程中已经打开的文件句柄
    调用ntdll.dll的微软没有公布的函数
    DWORD NtQuerySystemInformation( DWORD dwRecordType,
                     PDWORD pdwHandleList,
                     DWORD dwNumBytes,
                     PDWORD pdwNumBytesRet );

    可以返回所有的句柄表,然后根据句柄类型过滤出文件句柄
    1 NtQuerySystemInformation
    2 NtQueryObject

    13.
     

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

    新一篇: 编程技巧搜集(2) | 旧一篇: 如何在Windows2000中动态禁用/启用Ctrl-Alt-Delete

    评论

    #XY_dapro 发表于2008-11-27 15:28:19  IP: 125.40.130.*
    朋友,这个转走了!
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © Y___Y