admin 发布的文章

代码:

typedef BOOL (*load_function)(void* param, IStream*lpStream);


BOOL LoadFromIStream(IStream
* lpStream, load_function func, void*param)
{
return (*func)(param, lpStream);
}

BOOL LoadFromBuffer(
const BYTE* lpBuf, DWORD dwSize, load_function func, void*param)
{
if (NULL == lpBuf || dwSize <= 0)returnFALSE;

HGLOBAL hGlobal
=::GlobalAlloc(GHND, dwSize);if (NULL ==hGlobal)returnFALSE;

LPVOID lpBuffer
=::GlobalLock(hGlobal);if (NULL ==lpBuffer)
{
::GlobalFree(hGlobal);
returnFALSE;
}

memcpy(lpBuffer, lpBuf, dwSize);
::GlobalUnlock(hGlobal);

LPSTREAM lpStream
=NULL;
HRESULT hr
= ::CreateStreamOnHGlobal(hGlobal, TRUE, &lpStream);if (hr !=S_OK)
{
::GlobalFree(hGlobal);
returnFALSE;
}

BOOL bRet
=LoadFromIStream(lpStream, func, param);
lpStream
->Release();returnbRet;
}

BOOL LoadFromResource(HINSTANCE hInstance, LPCTSTR pszResourceName, LPCTSTR pszResType, load_function func,
void*param)
{
HRSRC hRsrc
=::FindResource(hInstance, pszResourceName, pszResType);if (NULL ==hRsrc)returnFALSE;

DWORD dwSize
=::SizeofResource(hInstance, hRsrc);if (0 ==dwSize)returnFALSE;

HGLOBAL hGlobal
=::LoadResource(hInstance, hRsrc);if (NULL ==hGlobal)returnFALSE;

LPVOID pBuffer
=::LockResource(hGlobal);if (NULL ==pBuffer)
{
::FreeResource(hGlobal);
returnFALSE;
}

HGLOBAL hGlobal2
=::GlobalAlloc(GHND, dwSize);if (NULL ==hGlobal2)
{
::FreeResource(hGlobal);
returnFALSE;
}

LPVOID pBuffer2
=::GlobalLock(hGlobal2);if (NULL ==pBuffer2)
{
::GlobalFree(hGlobal2);
::FreeResource(hGlobal);
returnFALSE;
}

memcpy(pBuffer2, pBuffer, dwSize);
::GlobalUnlock(hGlobal2);

LPSTREAM pStream
=NULL;
HRESULT hr
= ::CreateStreamOnHGlobal(hGlobal2, TRUE, &pStream);if (hr !=S_OK)
{
::GlobalFree(hGlobal2);
::FreeResource(hGlobal);
returnFALSE;
}

BOOL bRet
=LoadFromIStream(pStream, func, param);if(pStream)
pStream
->Release();

::FreeResource(hGlobal);
returnbRet;
}

BOOL LoadFromResource(HINSTANCE hInstance, UINT nIDResource, LPCTSTR pszResType, load_function func,
void*param)
{
returnLoadFromResource(hInstance, MAKEINTRESOURCE(nIDResource), pszResType, func, param);
}

使用办法:

typedef BOOL (*load_function)(void* param, IStream*lpStream);

BOOL LoadFromResource(HINSTANCE hInstance, UINT nIDResource, LPCTSTR pszResType, load_function func,
void*param);class CImageStatic : public CWindowImpl<CImageStatic, CStatic>,public COwnerDraw<CImageStatic>{private:static BOOL __LoadFunc(void* param, IStream*lpStream)
{
return ((CImageStatic*)param)->_LoadFunc(lpStream);
}
BOOL _LoadFunc(IStream
*lpStream)
{
HRESULT hr
= x_pImage->Load(lpStream);if (hr ==S_OK)
{
returnTRUE;
}
else{returnFALSE;
}
}
protected:
CImage
*x_pImage;

 

    void SetResId(unsigned intres_id)
{
if (!x_pImage)deletex_pImage;
x_pImage
= newCImage();
LoadFromResource(::GetModuleHandle(NULL), res_id, MAKEINTRESOURCE(IDR_GIF),
&__LoadFunc, this);this->Invalidate();
}

 

"======================================"基本配置"======================================"不兼容vi命令setnocompatible"打开语法高亮
syntax on
"开启文件类型检查,并且载入与该类型对应的缩进规则。
filetype indent
on "在底部状态栏显示当前模式,如插入、命令模式
set showmode
"在命令模式下显示当前命令,如输入2y时,会在状态栏显示命令,再次输入y时,执行命令,状态栏命令消失setshowcmd"是否显示状态栏。0表示不显示,1表示只在多窗口时显示,2表示显示。
set laststatus=2
"在状态栏显示光标的当前位置setruler"支持鼠标
set mouse=a
"当前文本使用uf8编码set encoding=utf-8 "保留命令的历史记录数
set history=1000
"显示行号setnumber"光标所在的当前行高亮
set cursorline
"设置行宽,即一行显示多少个字符set textwidth=100 "自动折行,即太长的行分成几行显示,关闭自动折行为set nowrap
set wrap
"只有遇到指定的符号(比如空格、连词号和其他标点符号),才发生折行。也就是说,不会在单词内部折行setlinebreak"垂直滚动时,光标距离顶部/底部的位置(单位:行)
set scrolloff=5
"水平滚动时,光标距离行首或行尾的位置(单位:字符)。该配置在不折行时比较有用。set sidescrolloff=10 "======================================"缩进相关配置"======================================"按下tab时显示的空格数set tabstop=4 "tab转化为多少个空格
set softtabstop=4
" 执行移位操作`>>或<<`时,显示的空格数set shiftwidth=4 "由于 tab 键在不同的编辑器缩进不一致,该设置自动将 Tab 转为空格
set expandtab
"自动缩略,当按下回车时,自动与上一行的缩进保持一致setautoindent"======================================"搜索相关配置"======================================" 光标遇到{[()]}时,会高亮显示另一半匹配的符号setshowmatch"高亮显示搜索的词
set hlsearch
"增量搜索匹配结果,即每输入一个字母都会进行匹配setincsearch"搜索时忽略大小写
set ignorecase
"如果同时打开了ignorecase,那么对于只有一个大写字母的搜索词,将大小写敏感;其他情况都是大小写不敏感setsmartcase"======================================"编辑相关配置"======================================" 不创建交换文件。交换文件主要用于系统崩溃时恢复文件,文件名的开头是.、结尾是.swpsetnoswapfile"自动切换工作目录。这主要用在一个 Vim 会话之中打开多个文件的情况,默认的工作目录是打开的第一个文件的目录。该配置可以将工作目录自动切换到,正在编辑的文件的目录。
set autochdir
"出错时,不要发出响声setnoerrorbells"出错时,发出视觉提示,通常是屏幕闪烁
set visualbell
"打开文件监视。如果在编辑过程中文件发生外部改变,就会发出提示。setautoread"命令模式下,底部操作指令按下 Tab 键自动补全
set wildmenu

 

上文,https://www.cnblogs.com/eaglexmw/p/14251259.html

在修改用户名、邮箱时,有可能提交的注释信息会乱码,这时候需要手工一个个恢复

主要内容参考:https://blog.csdn.net/qq_17011423/article/details/104648075

步骤1,进入git bash下,使用rebase命令

git rebase -i HEAD~23

步骤2,上述命令会从最新的提交倒数24条提交信息,进行rebase

然后,将需要修改的那条记录,pick修改为e,保存,需要修改多条,就多条修改为e

 

 步骤3,依次执行commit /rebase命令,修改从最老至最新的日志

git commit --amend && git rebase --continue

多条记录,需要反复执行这个命令,直到修改完成

步骤4,强推仓库

git push --force origin master