所学6

来源:互联网 发布:淘宝网登录不上 编辑:程序博客网 时间:2024/06/05 03:02
1.http://blog.csdn.net/wenfh2020/article/details/7790350
DestroyWindow 窗口创建和销毁要在同一个线程里 !要不然崩溃!

2.base64 解码如果中文记得转码从utf8转成gbk32 要不是乱码
 
3.与和或的应用   与可以按位赋值  或在if里a&b的值为0的话就为假,否则为真   或可以给位添1 与用来判断是否有1

  int a;
    int b;
    if (123)
    {
        a = 8;   
        b = 3;
    }

    if (a & b)
    {
        int c = 10;
    }
该值a & b为假

4.无法解析的外部符号  ----  有声明 没有定义  然后直接用了声明的函数  就会报这个错

5.release会对不适用的变量进行优化,相当于没有用到

6.http://www.cnblogs.com/cswuyg/p/3207576.html
捕获更多的dmp

7.单例模式编译问题
私有静态成员变量在使用前必须初始化,否则link会报错 !
还有
 static CWriteBack* const GetInstance()
{
    static CWriteBack *pCWriteBack = new CWriteBack();
    return pCWriteBack;
}
这么写没有问题  
静态局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次函数调用时,该变量已有值,就是上一次函数调用结束时的值静态局部变量在静态存储区分配存储单元,在程序的整个运行期间都不释放。静态局部变量是在编译时赋初值的,即只赋初值一次。意思就是 在程序的整个运行期间,静态局部变量只会赋一次初始值(只赋初值一次),不是说不能改!

8.InvaldateRect可以局部刷新 防止全部刷新进入到死循环

9.很多种,无法解析外部符号的错误,多数都是 在头文件中申明的函数方法,没有在cpp中实现,而导致的!!!

10.relsase 和debug互相发送消息可能有问题   debug send copydate消息到release会收不到

11.进程句柄找进程路径
void GetProcessFilePath(IN HANDLE hProcess, OUT CString& sFilePath)
    {
    sFilePath = _T("");
    TCHAR tsFileDosPath[MAX_PATH + 1];
    ZeroMemory(tsFileDosPath, sizeof(TCHAR)*(MAX_PATH + 1));
    if (0 == GetProcessImageFileName(hProcess, tsFileDosPath, MAX_PATH + 1))
        {
        return;
        }

    // 获取Logic Drive String长度
    UINT uiLen = GetLogicalDriveStrings(0, NULL);
    if (0 == uiLen)
        {
        return;
        }

    PTSTR pLogicDriveString = new TCHAR[uiLen + 1];
    ZeroMemory(pLogicDriveString, uiLen + 1);
    uiLen = GetLogicalDriveStrings(uiLen, pLogicDriveString);
    if (0 == uiLen)
        {
        delete[]pLogicDriveString;
        return;
        }

    TCHAR szDrive[3] = TEXT(" :");
    PTSTR pDosDriveName = new TCHAR[MAX_PATH];
    PTSTR pLogicIndex = pLogicDriveString;

    do
        {
        szDrive[0] = *pLogicIndex;
        uiLen = QueryDosDevice(szDrive, pDosDriveName, MAX_PATH);
        if (0 == uiLen)
            {
            if (ERROR_INSUFFICIENT_BUFFER != GetLastError())
                {
                break;
                }

            delete[]pDosDriveName;
            pDosDriveName = new TCHAR[uiLen + 1];
            uiLen = QueryDosDevice(szDrive, pDosDriveName, uiLen + 1);
            if (0 == uiLen)
                {
                break;
                }
            }

        uiLen = _tcslen(pDosDriveName);
        if (0 == _tcsnicmp(tsFileDosPath, pDosDriveName, uiLen))
            {
            sFilePath.Format(_T("%s%s"), szDrive, tsFileDosPath + uiLen);
            break;
            }

        while (*pLogicIndex++);
        } while (*pLogicIndex);

        delete[]pLogicDriveString;
        delete[]pDosDriveName;
    }

12.USES_CONVERSION 也可以用作 utf8和gbk之间的转换
USES_CONVERSION;
    wstring wstrContent;
    wstrContent = A2W_CP(strReceive.c_str(),CP_UTF8);
    string strContent;
    strContent = W2A_CP(wstrContent.c_str(),CP_ACP);

13.为了你程序员的人生着想. 请勿乱用方法....
较为标准的做法, 是采用接口. 全局数据均采用一个类来保存, 并且用接口的形式向外发布.
虽然读取全局变量的DLL, 只要DLL自己向外发布一个接口, 让外部调用这个接口设置全局变量接口进去就可以了.
这样不论日后怎样扩展, 也只是把接口加一起. 而不是说: 我的Param用掉了, 我又要加多一个全局变量喔..然后又去做些不规则动作, 这样写出来的一个程序. 谁也不会维护, 包括作者自己

14.全局变量的说明之前再加以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。

15.这种方式的置顶是肯定能置顶的
     //附加进程消息到置顶窗口上,设置焦点后取消附加
      HWND hForeWnd = ::GetForegroundWindow();  
      DWORD dwForeID = GetWindowThreadProcessId(hForeWnd, NULL);  
      DWORD dwCurID = GetCurrentThreadId();
      AttachThreadInput(dwCurID, dwForeID, TRUE);  
        SetFocus();
      AttachThreadInput(dwCurID, dwForeID, FALSE);
16.理解指向指针的指针 ,作用就是为了在函数中修改指向的值  
void abc(char  **p)
 {
    *p = "Yes!";
 }

 void def(char  *p)
 {
     p = "Yes!";
 }

void CMy12121Dlg::OnBnClickedOk()
{
     char *pachTemp = "Hello World";

     abc(&pachTemp);//可以修改pachTemp的值

     def(pachTemp);//不用指向指针的指针的话,函数中的指针,
                   //abc 完事pachTemp  的值为Yes!   def完事pachTemp的值还是 Hello World

}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 1岁半宝宝胆小怎么办 分手了还是想他怎么办 两岁宝宝夜惊怎么办 孩子误吃了牙膏怎么办 孩子跳舞脸上的妆卸不掉怎么办 4周岁还不会说话怎么办 宝贝2岁多还不会说话怎么办 孩子20个月离婚怎么办 两个月宝宝闹夜怎么办 两个月宝宝闹瞌睡怎么办 2岁宝宝话特别多怎么办 宝宝3岁还不会说话怎么办 小儿3岁说话晚怎么办 1岁半了不会说话怎么办 宝宝2岁还说话晚怎么办 一岁宝宝不愿意学说话怎么办 2周岁宝宝不愿意学说话怎么办 三岁宝宝不爱说话应该怎么办 三岁宝宝不理人怎么办 两岁半宝宝不说话不连贯怎么办 宝宝三岁说话口齿不清怎么办 b超宝宝腿短怎么办 两岁宝宝学说话口吃怎么办 两岁宝宝说话少怎么办 三岁宝宝说话少怎么办 快4岁不会说话怎么办 宝宝2岁半不爱说话怎么办 两岁半宝宝注意力不集中怎么办 中国出生的外籍小孩怎么办签证 中国人入外籍后国内财产怎么办 中国人入外籍后国内资产怎么办 小孩去美国上小学怎么办 咳嗽震的胸口疼怎么办 高中孩子对手机着迷怎么办 小孩不肯读书沉迷游戏怎么办 小孩沉迷吃鸡游戏怎么办 高一数学成绩差怎么办 小孩子学数学用手指算怎么办 孩子d和b分不清怎么办 和家人走散后怎么办幼儿教案 小孩胃口不好不爱吃饭怎么办