??xml version="1.0" encoding="utf-8" standalone="yes"?>久久综合亚洲色HEZYO社区,蜜臀久久99精品久久久久久,精品久久久久香蕉网http://www.shnenglu.com/szhoftuncun/category/5154.htmlQQ一P35660860 QQ二P40790936 癑ֺHi:1131729 上帝要你dq求完美的道路上zh-cnTue, 20 Jan 2009 16:59:53 GMTTue, 20 Jan 2009 16:59:53 GMT60关于文字输出的函数TabbedTextOut[整理]http://www.shnenglu.com/szhoftuncun/archive/2009/01/20/72382.html沈臻?foxtail)沈臻?foxtail)Tue, 20 Jan 2009 09:14:00 GMThttp://www.shnenglu.com/szhoftuncun/archive/2009/01/20/72382.htmlhttp://www.shnenglu.com/szhoftuncun/comments/72382.htmlhttp://www.shnenglu.com/szhoftuncun/archive/2009/01/20/72382.html#Feedback0http://www.shnenglu.com/szhoftuncun/comments/commentRss/72382.htmlhttp://www.shnenglu.com/szhoftuncun/services/trackbacks/72382.html关于文本的输?/strong>

在如何自q写文本控件时Q有关于如何展开Tab的具体做法:

 1void TextView::PaintLine(HDC hdc,int line_no)
 2
 3{
 4
 5       int length = document->GetLineLength(line_no + start_line_no);
 6
 7       char *buffer = new char[length];
 8
 9       document->GetLineBuffer(buffer,line_no + start_line_no);
10
11       //容纳单行文本矩Ş区域
12
13       RECT line_rect;
14
15       GetClientRect(tv_hwnd,&line_rect);
16
17       line_rect.top = line_no*(font_height + font_extra);
18
19       line_rect.bottom = line_rect.top + font_height + font_extra;
20
21       line_rect.left -= start_column_no*5;
22
23       //展开Tab字符
24
25       int tab = 4*font_width;
26
27       int width = TabbedTextOut(hdc,line_rect.left,line_rect.top,buffer,length,1,&tab,line_rect.left);//输出文字
28
29       line_rect.left = LOWORD(width);
30
31       ExtTextOut(hdc,0,0,ETO_OPAQUE,&line_rect,0,0,0);
32
33       delete []buffer;
34
35}

36


要明白他的意思才能在以后的编写扩展功能才能得心应手。首先要明白一个函数?/span>

 

TabbedTextOut

功能Q?/span>

1一个字W串写到指定位置?/span>

2q按制表位位|数l?/span>里的值展开制表W?/span>?/span>

 

函数原型Q?/span>

LONG TabbedTextOut(HDC hdc, int X, int Y, LPCTSTR lpString, int nCount, int nTabPositions, LPINT lpn TabStopPositions, int nTabOrigin)

 

参数意义Q?/span>

Hdc Q设备环境句柄?/span>

XQ?/span>   字符串开始点?/span>x坐标Q逻辑单位Q?/span>

YQ?/span>   字符串开始点?/span>y坐标Q逻辑单位Q?/span>

lpStringQ缓冲区指针?/span>

nCountQ?/span> 字符数?/span>

nTabPositionsQ指定制表位位置数组的值的个数?/span>

lpnTabStopPositionsQ数l,包含制表位位|(逻辑单位Q。必L照升序保存?/span>

nTabOriginQ指定制表符展开的开始位|的x坐标Q逻辑单位Q?/span>

 

q回|字符串的寸Q高位字表示高度Q低位表C宽度?/span>

 

注:

??span style="FONT: 7pt 'Times New Roman'">       如果nTabPositions0Q且lpnTabStopPositionsgNULLQ那么制表符会按q_字符宽度?/span>8位来扩展?/span>

??span style="FONT: 7pt 'Times New Roman'">       如果lpnTabStopPositions数组包含一个以上的话,则制表位被设为数l里的每一个|׃ؓlpnTabStopPositions个?/span>

??span style="FONT: 7pt 'Times New Roman'">       nTabOrigin参数允许一个应用程序ؓ一行多ơ调?/span>TabbedTextOut。如果应用程序多ơ调?/span>TabbedTextOutQ?/span>nTabOrigin每次都设|相同的|则此函数在相对于nTabOrigin指定的位|处展开所有的制表W?/span>

 

知识补充Q?/span>

TabbedTextOut(hdc,line_rect.left,line_rect.top,buffer,length,1,&tab,line_rect.left);

W六个参CؓnTabPosition = 1

W七个参CؓlpnTabStopPositions = tab = 4*font_width

W八个参CnTabOrigin = line_rect.left

因ؓ~辑器以行位模型Q当然是从一行的最左端开始。制表位数组g个等于字体宽度的4倍?/span>

 

摘自?/span>windows~程》的解释Q?/span>

TabbedTextOut的前五个参数?/span>TextOut相同Q第六个参数是蟩位间隔数Q第七个是以囄为单位的跳位间隔数组?/span>

 

?/span>1?/span>  如果q_字符宽度?/span>8个图素,而您希望?/span>5个字W加一个蟩位间隔,则这个数l将包含40?/span>80?/span>120Q按递增序依此cL?/span>

??span style="FONT: 7pt 'Times New Roman'">       如果W六个和W七个参数是0?/span>NULLQ则跳位间隔按每八个q_字符宽度讑֮?/span>

??span style="FONT: 7pt 'Times New Roman'">       如果W六个参数是1Q则W七个参数指向一个整敎ͼ表示跳位间隔重复增大的倍数Q例如,如果W六个参数是1Qƈ且第七个参数指向gؓ30的变量,则蟩位间隔设定在30?/span>60?/span>90…囄处)。最后一个参数给Z从蟩位间隔开始测量的逻辑x坐标Q它与字W串的v始位|可能相同也可能不同?/span>

 

~辑器的展开tab属于?/span>3】,增大倍数?/span>4个字W宽度?/span>4倍与8倍的区别如图Q?/span>

 

 



沈臻?foxtail) 2009-01-20 17:14 发表评论
]]>
俄罗斯方块V1.2http://www.shnenglu.com/szhoftuncun/archive/2008/11/16/67025.html沈臻?foxtail)沈臻?foxtail)Sat, 15 Nov 2008 16:22:00 GMThttp://www.shnenglu.com/szhoftuncun/archive/2008/11/16/67025.htmlhttp://www.shnenglu.com/szhoftuncun/comments/67025.htmlhttp://www.shnenglu.com/szhoftuncun/archive/2008/11/16/67025.html#Feedback2http://www.shnenglu.com/szhoftuncun/comments/commentRss/67025.htmlhttp://www.shnenglu.com/szhoftuncun/services/trackbacks/67025.htmll箋上个版本修改了一?/span>bugQ然后美化了一下?/span>

发现自己的审观不咋的,得漂亮的人家觉得不漂亮。还是照着大家要求的画一个?/span>

主要解决的问题是Q这ơ行列都用宏表示Q这样可以修改行列,H口大小也动态改变?/span>

另外长条旋{变成Z型问题也解决Q主要是取模的时候绕回去了?/span>

其中最重要的要是解决了刷新闪烁问题,管HAM2008指点q,始终没做成,q次vczh说了一句话q醒了我。根本不应该使用InvalidateRect函数Q直接画Q然后用~冲DC可以了?br>

VOID OnPaint()
{
    HDC hdc 
= GetDC(hWnd);
    HDC bitmap_dc 
= CreateCompatibleDC(hdc);
    HBITMAP bitmap 
= CreateCompatibleBitmap(hdc,1024,768);
    SelectObject(bitmap_dc,bitmap);
    
   
/********************************************
   DrawBlock
   ********************************************
*/

   
int x = tetris.GetX();
   
int y = tetris.GetY();

   
for(int i=0; i<4++i)
   
{
       
for(int j=0; j<4++j)
       
{
           
if(current_block[i][j] == 1)
           
{
               DrawBlock(bitmap_dc,y
+i+1,x+j+1,3,3,tetris.GetColor(),RGB(0,0,0));
           }

       }

   }


   
/*****************************************
   *DrawContainer
   *****************************************
*/

   
for(int i=0; i<ROWS; ++i)
   
{
       
for(int j=0; j<COLS; ++j)
       
{
           
if(Container[i][j] == 1)
           
{
               DrawBlock(bitmap_dc,i
+1,j+1,3,3,ColorTable[i][j],RGB(0,0,0));
           }

       }

   }


   BitBlt(hdc,
0,0,1024,768,bitmap_dc,0,0,SRCCOPY);
   DeleteDC(bitmap_dc);
   DeleteObject(bitmap);
   ReleaseDC(hWnd,hdc);
}

以上是GDI~冲的主要实C码?br>


可执行文件下?/a>
代码q是{全部完善后上传吧。Redist误行下载?/span>
代码估计要有大的改动Q感觉现在的代码没一点C++的味道?br>有点单,用陈坤的话说是扩展性不好?

沈臻?foxtail) 2008-11-16 00:22 发表评论
]]>
俄罗斯方块V1.0http://www.shnenglu.com/szhoftuncun/archive/2008/11/09/66377.html沈臻?foxtail)沈臻?foxtail)Sat, 08 Nov 2008 16:06:00 GMThttp://www.shnenglu.com/szhoftuncun/archive/2008/11/09/66377.htmlhttp://www.shnenglu.com/szhoftuncun/comments/66377.htmlhttp://www.shnenglu.com/szhoftuncun/archive/2008/11/09/66377.html#Feedback2http://www.shnenglu.com/szhoftuncun/comments/commentRss/66377.htmlhttp://www.shnenglu.com/szhoftuncun/services/trackbacks/66377.html记得8月䆾写过俄罗斯方块,那会全是用坐标表C的。包括所有方块的变换Q甚x块的表示。导致程序内部许多的case语句Q甚为麻烦。代码量也有q?/span>1800行左叟뀂而且写完?/span>bug很多Q修正也修正不完Q异常头痛便攑ּ了?/span>

现在看看《编E之》的俄罗斯方块的思\Q又惌vvczh用脚本的写的俄罗斯方块,又起了兴趣。便重新设计完成了,q次基本没什?/span>bug了。只不过操作习惯上和QQ的俄|斯方块q有些不同?/span>

1.       在底部的时候,如果按住旋{不放Q则会停留原地旋转。原因是Z接触底部时旋{不插入墙壁,同接触左右墙壁一P做了调整方块坐标处理。处理方法是Ҏ旋{后方块的坐标加上Q减去)最大列(最列)在减去(左)双界得到。底部也是这栯的。当然有了这L便出现了这L小?/span>bugQ不q我怿没h会在底部按住不放的?/span>

2.       q次方块全部存储在一个一l数l中Q通过指针的变换来改变方块U类与旋转状态,但是Z方便操作Q就拯C一个二l数l中。v初设计是一个四l数l,q样方便多了,但是VS2008的编译器却不能编译通过Q?/span>int[4][4]?/span>int **p的{换不成功Q朋友说是编译器问题。后来经Lend3d_很多目都是不用大于二维的数l的Q于是干脆就用了一l数l,本来要听从他意见用结构表CZ个低二位的数l元素,但是初始化和使用都不是很方便?/span>

3.       另外关于GDI~冲Q试用了一下,但是作用貌似不大Q不知道原因。关于这斚w的知识援助还是要感谢HAM2008的帮助?br>



贴个头文件出来就可以知道大致做法了?br>
#ifndef TETRIS_H
#define TETRIS_H

#pragma once

extern int Container[18][10];//容纳方块的空?/span>
extern int current_block[4][4];

/****************************
* 方块的主要行?br>****************************
*/

class Tetris
{
public:
    Tetris();
    
~Tetris();
    
void GenerateBlock();
    
void StepLeft();
    
void StepRight();
    
void StepDown();
    
void Rotate();
    
void CaculateScore();
    
void IsOver();
public:
    
bool lost;
    
int score;//得分
    int GetX();
    
int GetY();
private:
    inline 
int CaculateMinCol();
    inline 
int CaculateMinRow();
    inline 
int CaculateMaxCol();
    inline 
int CaculateMaxRow();

    
void CaculateBlockBoundary();
    
bool DetectCollision();
    
void CopyToContainer();
    
void CopyToBlock();

    
int *block;
    
int total_rotate;
    
int kind;

    
int offset_x;
    
int offset_y;

    
int min_col,max_col;
    
int min_row,max_row;
}
;

#endif //TETRIS_H

可能自己设计上的能力q是不吧,有些函数是不得以写的Q比如四个inline函数Q因的时候用的是四个循环Q计完p跛_两层循环?br>N用gotoQ如果直接return则后面的代码执行不到了,不得以做了四个辅助函数?br>
源代码下载:TetrisV1.0
可执行文件下载:TetrisV1.0.exe 如果不能q行可到微Y下蝲VS2008?redist_x86

沈臻?foxtail) 2008-11-09 00:06 发表评论
]]>
文gMD5计算工具http://www.shnenglu.com/szhoftuncun/archive/2008/10/26/65052.html沈臻?foxtail)沈臻?foxtail)Sat, 25 Oct 2008 17:50:00 GMThttp://www.shnenglu.com/szhoftuncun/archive/2008/10/26/65052.htmlhttp://www.shnenglu.com/szhoftuncun/comments/65052.htmlhttp://www.shnenglu.com/szhoftuncun/archive/2008/10/26/65052.html#Feedback0http://www.shnenglu.com/szhoftuncun/comments/commentRss/65052.htmlhttp://www.shnenglu.com/szhoftuncun/services/trackbacks/65052.htmlC++博客上的蚂蚁l结者的文章都写的不错,它写了个MD5的算法,我就用他的算法写了个程序?br>单的计算文g的MD5Q支持拖拽文件。现在还只是单的计算?br>目前打算改进的是
1dq度条?br>2化界面?br>3解决大文件计时界面僉|问题?br>
个h写程序喜Ƣ不断改q,也就是偶然突发奇惛_个程序。以后想h改q一下。嘎嘎?br>要是忘记了,׃|。代码可点击q里下蝲



沈臻?foxtail) 2008-10-26 01:50 发表评论
]]>
ClipBoard.ASM文g分析http://www.shnenglu.com/szhoftuncun/archive/2008/10/03/63189.html沈臻?foxtail)沈臻?foxtail)Fri, 03 Oct 2008 08:27:00 GMThttp://www.shnenglu.com/szhoftuncun/archive/2008/10/03/63189.htmlhttp://www.shnenglu.com/szhoftuncun/comments/63189.htmlhttp://www.shnenglu.com/szhoftuncun/archive/2008/10/03/63189.html#Feedback1http://www.shnenglu.com/szhoftuncun/comments/commentRss/63189.htmlhttp://www.shnenglu.com/szhoftuncun/services/trackbacks/63189.html脑袋里没有点API的储量,惛_什么东西还是很困难的。厚U薄发才是硬道理。所以先看看别h的代码,偷学几个API的用法?/p>
SetClipData proc lpData:LPSTR,dwSize:dword
    LOCAL    hMem:HANDLE ;
==>内存块句?br>    LOCAL    pMem:dword  ;==>内存块指?br>
    mov        eax,dwSize
    shr        eax,
3
    inc        eax
    shl        eax,
3 ;==>(dwSize/8 + 1)*8 不满8的倍数则补?br>    invoke xGlobalAlloc, GHND or GMEM_DDESHARE, eax
    test    eax,eax       ;
==>甌成功则l否则蟩转到@exit2
    je        @exit2
    mov        hMem,eax
    invoke GlobalLock,eax    ;hGlob ;
==>锁定甌的内存块q回内存块指?br>    test    eax,eax
    je        @exit1
    mov        pMem,eax
    invoke RtlMoveMemory,eax,lpData,dwSize  ;
==>复制lpData的内容到甌的内存块?br>    mov        eax,pMem
    add        eax,dwSize
    mov        
byte ptr [eax],0 ;==>在内存块最后添0l束
    invoke GlobalUnlock,hMem ;
==>解锁Q内存块指针无?br>    invoke OpenClipboard,NULL
    .
if eax
        invoke EmptyClipboard
        invoke SetClipboardData,CF_TEXT,hMem ;
==>数据关联到剪脓?br>        invoke CloseClipboard
        xor        eax,eax        ;
0 - Ok
        jmp        @exit3
    .endif
  @exit1:
    invoke  GlobalFree, hMem ;
==>未锁定成功则释放该内存块
    xor     eax, eax
  @exit2:
    dec     eax          ; 
-1 - error
  @exit3:
    ret

SetClipData endp

看完q段代码我有一个疑问,q里是将lpData的数据拷贝到一个内存块Q然后与剪脓板关联,我这里解释ؓ兌Q我p为剪贴板不应该是一个内存区域,我猜是一个链表之cȝl构Q然后链表每一个节点存储一个内存区域的指针q有其他的信息,然后Ҏ信息来管理?/span>

否则应该可以直接?/span>lpData来跟剪脓板关联。另一个原因是lpData是局部的随时会被释放的。如有不正确q望指正?/span>



沈臻?foxtail) 2008-10-03 16:27 发表评论
]]>
[zt]关于DLL的创建和使用http://www.shnenglu.com/szhoftuncun/archive/2008/10/02/63170.html沈臻?foxtail)沈臻?foxtail)Thu, 02 Oct 2008 15:19:00 GMThttp://www.shnenglu.com/szhoftuncun/archive/2008/10/02/63170.htmlhttp://www.shnenglu.com/szhoftuncun/comments/63170.htmlhttp://www.shnenglu.com/szhoftuncun/archive/2008/10/02/63170.html#Feedback0http://www.shnenglu.com/szhoftuncun/comments/commentRss/63170.htmlhttp://www.shnenglu.com/szhoftuncun/services/trackbacks/63170.html  (1)Windows的系l目录:\windows\systemQ?br>  (2)DOS中path所指出的Q何目录;
  (3)E序所在的目录?br>  一、动态链接库的结?br>
  动态链接库中定义有两种函数Q导出函?export function)和内部函?internal function)Q?br>导出函数可以被其它模块调用,内部函数只能在库内部使用。我们在用CQ+定制动态库文gӞ
需要编写的是包含导出函数表的模块定义文g(.DEF)和实现导出函数功能的CQ+文g。下面以
Sample.dllZ介绍DEF文g和实现文件的l构?br>  1.模块定义文g(.DEF)是一个或多个用于描述DLL属性的模块语句l成的文本文Ӟ每个DEF?br>件至必d含以下模块定义语句:
  ·W一个语句必LLIBRARY语句Q指出DLL的名字;
  ·EXPORTS语句列出被导出函数的名字Q?br>  ·可以使用DESCRIPTION语句描述DLL的用?此句可?Q?br>  ·"Q?对一行进行注?可??br>  2.实现文g
  实现入口表函数的cpp文g中,包含DLL入口点处理的API函数和导出函数的代码?br>  二、创建Sample.dll
   1.首先创徏Sample.dll的工E?启动VCQ+5.0按以下步骤生成DLL工程:
  ·在选单中选择File\New\ProjectQ?br>  ·在工E列表中选择Win32 DynamicQLink LibraryQ?br>  ·在Project Name中输入工E名:SampleQ?br>  ·单击Location双按钮,选择c:\sample目录Q?br>  ·单击OK完成,x已创ZSample.dll的工E文件?br>  2.创徏Sample.def文gQ?br>  ·在选单中选择File\New\Text FileQ?br>  ·输入以下代码后保存文件名"Sample.def"Q?br>   ;Sample.def
   ;指出DLL的名字Sample,链接器将q个名字攑ֈDLL导入库中
   LIBRARY Sample
   ;定义导出函数ShowMe()Z

   EXPORTS
   ShowMe
   ;def文gl束
  3.创徏Sample.cpp
   .在选单中选择File\New\CQ+ Source File?br>   .输入以下代码后保存文件名"Sample.cpp"
   //Sample.cpp
   #include 〈windows.h?br>   int ShowMe(void);
   //DllEntryPoint为DLL入口点函?负责初试化ƈl止DLL
   BOOL WINAPI DllEntryPoint(HINSTANCE hDLL,DWORD dwReason,LPVOID Reserved)
   { switch(dwReason)
   { case DLL-PROCESS-ATTACH:
   { break; }
   case DLLQPROCESSQDETACH:
   { break; } }
   return TRUE; }
   int ShowMe(void)
   { //蜂鸣器响一?br>   MessageBeep((WORD)Q?);
   MessageBox("你好!");
   return 1; }
  4.~译DLL文g
  从Build选单中选择Build Sample.DLL,产生Sample.DLL文g,以后可以随时调用了?br>  三、在应用E序中调用DLL文g
  在应用程序中要首先装入DLL后才能调用导中的函数,例如用MFC创徏Z对话框的?br>ETest,q在对话框上攄"Load"按钮,你就必须d装蝲代码?br>  1.首先在TestDlg.cpp的首部添加变量设|代码:
  //讄全局变量gLibSample用于存储DLL句柄
  HINSTANCE gLibSample=NULL;
  //W二个变量ShowMe是指向DLL库中ShowMe()函数的指?br>  typedef int(?SHOWME)(void);

  SHOWME ShowMe;
  2.利用ClassWizard?Load"按钮d装蝲DLL的代码:
  Void CTestDlg::OnLoadButton()
  { //要添加的代码如下
   if(gLibMyDLL!=NULL)
   { MessageBox("The Sample.DLL has already been load.");
   return; }
   //装蝲Sample.dllQ未加\径,在三个默认路径中寻?br>   gLibSample=LoadLibrary("SAMPLE.DLL");
   //q回DLL中ShowMe()函数的地址
   ShowMe=(SHOWME)GetProcAddress(gLibSample,"ShowMe"); }
  3.只要DLL装蝲成功,在应用程序中可以直接调用ShowMe()函数Q本E序在Windows 95,VCQ+5.0中运行通过Q?



沈臻?foxtail) 2008-10-02 23:19 发表评论
]]>
如何自己写Win32控ghttp://www.shnenglu.com/szhoftuncun/archive/2008/08/20/59470.html沈臻?foxtail)沈臻?foxtail)Wed, 20 Aug 2008 14:06:00 GMThttp://www.shnenglu.com/szhoftuncun/archive/2008/08/20/59470.htmlhttp://www.shnenglu.com/szhoftuncun/comments/59470.htmlhttp://www.shnenglu.com/szhoftuncun/archive/2008/08/20/59470.html#Feedback0http://www.shnenglu.com/szhoftuncun/comments/commentRss/59470.htmlhttp://www.shnenglu.com/szhoftuncun/services/trackbacks/59470.html最早时候就曄哪里看到q说所有控仉是窗口(windowQ,更有甚者说都是对象Q这个就不扯了。自己做好的控g是做?/span>Libq是Dll那是后话Q?/span>MFC我是不熟悉了Q?/span>Win32q是看了几天的。大致把制作的整个流E简要的记录一下?/span>

自己做的控g最主要的功能就是接受你发给他的命oQ也是要给外部调用的接口。控件有自己的消息处理函数比?/span>

LRESULT CALLBACK PETextViewWndProc(HWND hWnd,UINT Message,WPARAM wParam,LPARAM lParam)
{
    PETextView 
*View = (PETextView*)GetWindowLong(hWnd,0);

    
switch(Message)
    
{
    
case WM_NCCREATE:
        
if((View = new PETextView(hWnd)) == 0)
            
return false;

        SetWindowLong(hWnd,
0,(LONG)View);
        
return true;

    
case WM_NCDESTROY:
        
if(View)delete View;
        
return 0;

    
case WM_PAINT:
        
return View->OnPaint();

    
case WM_SIZE:
        
return View->OnSize(wParam, LOWORD(lParam), HIWORD(lParam));

    
case PEM_OPENFILE:
        
return View->OpenFile((TCHAR*)lParam);

    
case PEM_CLEAR:
        
return View->ClearFile();
    
default:
        
break;
    }


    
return DefWindowProc(hWnd,Message,wParam,lParam);
}


q里有两cL息,一cLpȝ定义的以WM开_一cL自己定义的,当然随便你自己定义啦。对应的消息看到是调用相应的函数完成的,q也是说控件的行ؓ可以另外编写逻辑部分Q然后提供接口给q里调用卛_?/span>

之所以说控g是H口是因Z有自qH口c,以及初始化函敎ͼ同时也有创徏的函数。窗口类的定义和注册也做成提供给外部的接口,在外部必要的时候调用。而控制控件是通过发送消息来实现的,Z更加好看Q可以定义一个宏Q比?/span>

#define PE_OpenFile(hWnd, Path)        SendMessage((hWnd), PEM_OPENFILE, 0, (LPARAM)(Path))

那么创徏H口和控件唯一不同的地方就是,内部的创建和销毁消息是WM_NCCREATE?/span>WM_NCDESTROYQ先不管q两个消息。我们看?/span>WM_NCCREATE之前有个GetWindowLongQ其内有?/span>SetWindowLong。这两个是关键的Q这样就讄了这个控件的属性,使其兌hQ第二个参数msdn上是没有说明讄?/span>0是什么意思的Q其实这两个函数的第二个参数讄0表示d的意思,W一个是d该控件的属性,然后W二个函数在增加W三个参数的属性的同时d赋予l这个控件?/span>

 

一切都OK了!那么控g创徏可在外部?/span>WM_CREATE之时调用Q当然也可以在用其功能前调用即可?/span>

 

一切提供给外部的调用都Port在一个头文g中,q样使用的时候包含这个头文g好了?/span>

接下来解释那两个消息Q这两个消息是因为我们创Z子窗口,也就是我们自q控g?/span>

q两个消息与WM_CREATE,WM_DESTROY之间的顺序关pLq样的,只看销毁吧?/span>

hwnd = parent, uMsg = WM_DESTROY
hwnd = child, uMsg = WM_DESTROY
hwnd = child, uMsg = WM_NCDESTROY
hwnd = parent, uMsg = WM_NCDESTROY

WM_DESTROY是通知子窗口销毁,然后子窗口通过接受WM_NCDESTROYq行销毁,q发送给父窗口,q行销毁?/span>

 

l节部分介绍的差不多QM思\是和创建窗口差不多Q但是要搞个头文Ӟ把一些个帔R和功能的函数另外一个窗口类的初始化和创建的接口搞进厅R?/span>



沈臻?foxtail) 2008-08-20 22:06 发表评论
]]>
[Z]Visual C++开发工具与调试技巧整?/title><link>http://www.shnenglu.com/szhoftuncun/archive/2008/07/29/57460.html</link><dc:creator>沈臻?foxtail)</dc:creator><author>沈臻?foxtail)</author><pubDate>Tue, 29 Jul 2008 12:05:00 GMT</pubDate><guid>http://www.shnenglu.com/szhoftuncun/archive/2008/07/29/57460.html</guid><wfw:comment>http://www.shnenglu.com/szhoftuncun/comments/57460.html</wfw:comment><comments>http://www.shnenglu.com/szhoftuncun/archive/2008/07/29/57460.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/szhoftuncun/comments/commentRss/57460.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/szhoftuncun/services/trackbacks/57460.html</trackback:ping><description><![CDATA[本文转自<a style="COLOR: #0000ff" target=_blank>Azure博客</a><br><br>自己L用VCq_来开发东西,但是有时候L样那L问题Q呵呵,L需要上|查资料来解?在这里把自己用到上网查的一些技巧摘录如?希望对大家有用,省去大家再去搜烦的烦恹{?br><br><strong>1.如何在Release状态下q行调试</strong><br>ProjectQ?gt;SettingQ?gt;ProjectSetting对话框,选择Release状态。C/C++标签中的Category选GeneralQOptimizations选Disable(Debug)QDebut info选Program Database。在Link标签中选中Generate debug info复选框?br><br>注:只是一个介乎Debug和Release的中间状态,所有的ASSERT、VERIFY都不起作用,函数调用方式已经是真正的调用Q而不查表Q但是这U状态下QuickWatch、调用队列跟t功能仍然有效,和Debug版一栗?br><br><strong>2. Release和Debug有什么不?/strong><br>Release版称为发行版QDebug版称试版?br>Debug中可以单步执行、跟t等功能Q但生成的可执行文g比较大,代码q行速度较慢。Release版运行速度较快Q可执行文g较小Q但在其~译条g下无法执行调试功能?br>Release的exe文g链接的是标准的MFC DLL(Use MFC in a shared or static dll)。这些DLL在安装Windows的时候,已经配置Q所以这些程序能够在没有安装Visual C++ 6.0的机器上q行。而Debug版本的exe链接了调试版本的MFC DLL文gQ在没有安装Visual C++6.0的机器上不能q行Q因为缺相应的DLLQ除非选择use static dll when link?br><br><strong>3. ASSERT和VERIFY有什么区?/strong><br>ASSERT里面的内容在Release版本中不~译QVERIFY里面的内容仍然翻译,但不再判断真假。所以后者更安全一炏V?br>例如ASSERT(file.Open(strFileName))?br>一旦到了Release版本中,q一行就忽略了,fileҎ׃Open()了,而且没有M出错的信息。如果用VERIFY()׃会有q个问题?br><br><strong>4.Workspace和Project之间是什么样的关p?/strong><br>每个Workspace可以包括几个projectQ但只有一个处于Active状态,各个project之间可以有依赖关p,在project的Setting..中可以设定,比如那个Active状态的project可以依赖于其他的提供其函数调用的静态库?br><br><strong>5. 如何在非MFCE序中用ClassWizard</strong><br>在工E目录下新徏一个空?RC文gQ然后加入到工程中就可以了?br><br><strong>6.如何讄断点</strong><br>按F9在当前光标处增加一个断点和取消一个断炏V?br>另外Q在~辑状态下Q按Ctrl+Bl合键,弹出断点讄对话框。然后单凅RCondition…】按钮弹|断Ҏ件的对话框进行设|?br><br><strong>7.在编辑状态下发现成员变量或函C能显C提C是如何打开昄功能</strong><br>q似乎是目前q个Visual C++ 6.0版本的一个bugQ可按如下步骤其正常,如再出现Q可如法炮制Q?br>(1)关闭Project<br>(2)删除“工程?ncb”文g<br>(3)重新打开工程<br><br><strong>8.如何一个通过ClassWizard生成的类d删除</strong><br>首先在工作区的FileView中选中该类?h?cpp文gQ按delete删除Q然后在文g理器中这两个文g删除Q再q行ClassWizardQ这时出现是否移走该cȝ提示Q选择remove可以了?br><br><strong>9. 如何在workspace中消qcL出来</strong><br>打开该类对应的头文gQ然后将其类名随便改一下,q个时候工作区׃出现新的c,再将q个cL回原来的名字可以了?br><br><strong>10. 如何清除所有的断点</strong><br>菜单【Edit】->【Breakpoints…】,打开“Breakpoints”对话框,单击【Remove All】按钮即可。快捷键?#8220;Ctrl + Shift + F8”?br><br><strong>11. 如何再ClassWizard中选择未列出的信息</strong><br>打开“ClassWizard”对话框,然后切换?#8220;Class Info”面。改?#8220;Message filter”Q如选择“Window”Q?#8220;Message”面׃出现Window的信息?br><br><strong>12. 如何程序中的括h否匹?/strong><br>把光标移动到需要检的括号前面Q按快捷?#8220;Ctrl + ]”。如果括号匹配正,光标p到匹配的括号处,否则光标不移动,q且机箱喇叭q会发出一声警告?br><br><strong>13. 如何查看一个宏(或变量、函?的定?/strong><br>把光标移动到要查看的一个宏上,比如说最常见的DECLARE_MAP_MESSAGE上按一下F12(或右键菜单中的相兌?Q如果没有徏立浏览文Ӟ׃出现提示对话框,按【确定】按钮,然后׃跛_该宏(或变量、函?定义的地斏V?br><br><strong>14. 如何dLib文g到当前工E?/strong><br>单击菜单【Project】->【Settings…】弹?#8220;Project Setting”对话框,切换?#8220;Link”标签,?#8220;Object/library modules”处输入Lib文g名称Q不同的Lib之间用空格格开?br><br><strong>15. 如何快速删除项目下的Debug文g夹中临时文g</strong><br>在工作区的FileView视图中选中对应的项目,单击右键弹出菜单Q选择【Clean(selection only)】菜单即可?br><br><strong>16. 如何快速生成一个现有工E除了工E名外完全相同的新工E?/strong><br>在新建工E的“New”对话框中选择“Custom Appwizard”,输入新工E的名字Q单凅ROK】按钮。出?#8220;Custom AppWizard”,输入新工E的名字Q单凅ROK】按钮。出?#8220;Custom AppWizardQStep 1 of 2”对话框,选择“An existing Project”,单击【Next】按钮。出?#8220;Custom AppWizardQStep 2 of 2”对话框,选择现有工程的工E文件名Q最后单凅RFinish】按钮。编译后q成一个与现有工程相同但可以重新取名的工程AppWizard?br>现在可以项用MFC AppWizard一Lq个定制的向对{如果不想用了,可以在Visual C++ 6.0安装目录下Common\MSDev98\Template目录中删除该Wizard对应?awx?pdb文g?br><br><strong>17. 如何解决Visual C++ 6.0不正连接的问题</strong><br>情景Q明明改动了一个文Ӟ却要把整个项目全部重新编译链接一ơ。刚刚链接好Q一q行Q又提示重新~译链接一ơ?br>q是因ؓ出现了未来文?修改旉和创建时间比pȝ旉?的缘故。可以这样处理:扑ֈ工程文g夹下的debug目录Q将创徏和修Ҏ间都比系l时间的文g全部删除Q然后再从新“Rebuild All”一ơ?br><br><strong>18. 引vLNK2001的常见错误都有哪?/strong><br>遇到的LNK2001错误主要为:unresolved external symbol “symbol”<br>如果链接E序不能在所有的库和目标文g内找到所引用的函数、变量或标签Q将产生此错误信息?br>一般来_发生错误的原因有两个Q一是所引用的函数、变量不存在Q拼写不正确或者用错误;其次可能使用了不同版本的链接库。以下是可能产生LNK2001错误的原因:<br><1>׃~码错误D的LNK2001错误<br>(1)不相匚w的程序代码或模块定义(.DEF)文gDLNK2001。例如,如果在C++源文件了内声明了一变量“var1”Q却试图在另一个文件内以变?#8220;var1”讉K改变量?br>(2)如果使用的内联函数是?cpp文g内定义的Q而不是在头文件内定义导致LNK2001错误?br>(3)调用函数时如果所用的参数cd和头函数声明时的cd不符会产生LNK2001错误?br>(4)试图从基cȝ构造函数或析构函数中调用虚拟函数时会DLNK2001错误?br>(5)要注意函数和变量的可公用性,只有全局变量、函数是可公用的。静态函数和静态变量具有相同的使用范围限制。当试图从文件外部方位Q何没有在该文件内声明的静态变量时导致编译错误或LNK2001错误?br><2>׃~译和联机的讄而造成的LNK2001错误<br>(1)如果~译时用的?NOD(/NODERAULTLIB)选项Q程序所需要的q行库和MFC时将得到又编译器写入目标文g模块Q但除非在文件中明确包含q些库名Q否则这些库不会被链接进工程文g。这U情况下使用/NOD导致LNK2001错误<br>(2)如果没有为wWinMainCRTStartup讑֮E序入口Q在使用Unicode和MFC时将出现“unresolved external on _WinMain@16”的LNK2001错误信息?br>(3)使用/MD选项~译Ӟ既然所有的q行库都被保留在动态链接库之内Q源文g中对“func”的引用,在目标文仉卛_“__imp__func”的引用。如果试图用静态库LIBC.LIB或LIBCMT.LIBq行链接Q将在__imp__func上发生LNK2001错误。如果不使用/MD选项~译Q在使用MSVCxx.LIB链接时也会发生LNK2001错误?br>(4)使用/ML选项~译Ӟ如用LIBCMT.LIB链接会在_errno上发生LNK2001错误?br>(5)当编译调试版的应用程序时Q如果采用发行版模态库q行链接也会产生LNK2001错误Q同P使用调试版模态库链接发行版应用程序时也会产生相同的错误?br>(6)不同版本的库和编译器的؜合用也能生问题,因ؓ新版的库里可能包含早先的版本没有的符号和说明?br>(7)在不同的模块中用内联和非内联的~译选项能够DLNK2001错误。如果创建C++库时打开了函数内?/Ob1?Ob2)Q但是在描述该函数的相应头文仉却关闭了函数内联(没有inline关键?Q只是将得到错误信息。ؓ避免该问题的发生Q应该在相应的头文g中用inline关键字标志ؓ内联函数?br>(8)不正的/SUBSYSTEM或ENTRY讄也能DLNK2001错误?br><br><strong>19. 如何调试一个没有源码的exe文g调用的dll</strong><br>在Visual C++ 6.0中,q入“Project Setting”对话框然后选择Debug标签c通常Visual Studio默认“executable for debug session”为可执行文g名,但可以将他改成Q何你惌的程序。甚臛_以指定不同的工作目录以及传递参数到你的E序。这个技术常用来调试Dlls、名字空间扩展、COM对象和其他从某些EXE以及从第三方的EXE中调用的plug-inE序?br><br><strong>20. Visual C++ 6.0工程中的目文g都表CZ?/strong><br>.optQ工E关于开发环境的参数文g。如工具条位|等信息?br>.aps(AppStudio File)资源辅助文gQ二q制格式Q一般不用去它?br>.clwQClassWizard信息文gQ实际上是INI文g格式Q有兴趣可以研究一下。有时候ClassWizardZ问题Q手工修改CLW文g可以解决。如果此文g不存在的话,每次用ClassWizard的时候回提示是否重徏?br>.dsp(DevelopStudio Project)Q项目文Ӟ文本格式Q不q不熟悉的不要手工修攏V?br>.dsw(DevelopStudio Workspace)Q是工作区文Ӟ其他特点?dsp差不多?br>.plgQ是~译信息文gQ编译时的error和warning信息文g(实际上是一个html文g)Q一般用处不大。在单击菜单【Tool】->【Option】弹出的对话框里面有个选项可以控制q个文g的生成?br>.hpj(Help Project)Q是生成帮助文g的工E,用microsoft Help Compiler可以处理?br>.mdp(Microsoft DevStudio Project)Q是旧版本的目文gQ如果要打开此文件的话,会提CZ是否转换成新?dsp格式?br>.bscQ是用于览目信息的,如果用Source Brower的话必Lq个文g。如果不用这个功能的话,可以在Project Options里面LGenerate Browse Info FileQ这样可以加快编译速度?br>.map是执行文件的映象信息记录文gQ除非对pȝ底层Q这个文件一般用不着?br>.pch(Pre-Compiled File)Q是与编译文Ӟ可以加快~译速度Q但是文仉常大?br>.pdb(Program Database)Q记录了E序有关的一些数据和调试信息Q在调试的时候可能有用?br>.expQ只有在~译DLL的时候才会生成,记录了DLL文g的一些信息,一般也没有用?br>.ncbQ无~译览文g(no compile browser)。当自动完成功能出问题时可以删除此文件。编译工E后会自动生成? <img src ="http://www.shnenglu.com/szhoftuncun/aggbug/57460.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/szhoftuncun/" target="_blank">沈臻?foxtail)</a> 2008-07-29 20:05 <a href="http://www.shnenglu.com/szhoftuncun/archive/2008/07/29/57460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Scintilla 主要cd控g的消?/title><link>http://www.shnenglu.com/szhoftuncun/archive/2008/07/17/56458.html</link><dc:creator>沈臻?foxtail)</dc:creator><author>沈臻?foxtail)</author><pubDate>Thu, 17 Jul 2008 10:43:00 GMT</pubDate><guid>http://www.shnenglu.com/szhoftuncun/archive/2008/07/17/56458.html</guid><wfw:comment>http://www.shnenglu.com/szhoftuncun/comments/56458.html</wfw:comment><comments>http://www.shnenglu.com/szhoftuncun/archive/2008/07/17/56458.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/szhoftuncun/comments/commentRss/56458.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/szhoftuncun/services/trackbacks/56458.html</trackback:ping><description><![CDATA[  <p><span>主要c?/span></p> <table cellSpacing=0 cellPadding=0 border=1> <tbody> <tr> <td vAlign=top width=284> <p><span>CellBuffer</span></p> </td> <td vAlign=top width=284> <p><span>保存文本Q样式信息,恢复堆栈Q标{,代码叠vl构{信?/span></p> </td> </tr> <tr> <td vAlign=top width=284> <p><span>ContractionState</span></p> </td> <td vAlign=top width=284> <p> </p> </td> </tr> <tr> <td vAlign=top width=284> <p><span>Document</span></p> </td> <td vAlign=top width=284> <p><span>包含</span><span>CellBuffer</span><span>和一些高度抽象操作,理样式处理?/span></p> </td> </tr> <tr> <td vAlign=top width=284> <p><span>Editor</span></p> </td> <td vAlign=top width=284> <p><span>使用</span><span>ContractionState, Indicator, LineMarker, Style, ViewStyle</span><span>来显C文?/span><span>KeyMap</span><span>?/span><span>ContractionState</span><span>同样在这里用?/span></p> </td> </tr> <tr> <td vAlign=top width=284> <p><span>Indicator</span></p> </td> <td vAlign=top width=284> <p> </p> </td> </tr> <tr> <td vAlign=top width=284> <p><span>LineMarker</span></p> </td> <td vAlign=top width=284> <p> </p> </td> </tr> <tr> <td vAlign=top width=284> <p><span>Style</span></p> </td> <td vAlign=top width=284> <p> </p> </td> </tr> <tr> <td vAlign=top width=284> <p><span>ViewStyle</span></p> </td> <td vAlign=top width=284> <p> </p> </td> </tr> <tr> <td vAlign=top width=284> <p><span>KeyMap</span></p> </td> <td vAlign=top width=284> <p> </p> </td> </tr> <tr> <td vAlign=top width=284> <p><span>ScintillaBase</span></p> </td> <td vAlign=top width=284> <p><span>Editor</span><span>的子c,增加了调用提C和自动完成{功能,使用c?/span><span>CallTip</span><span>?/span><span>AutoComplete</span></p> </td> </tr> <tr> <td vAlign=top width=284> <p><span>CallTip</span></p> </td> <td vAlign=top width=284> <p> </p> </td> </tr> <tr> <td vAlign=top width=284> <p><span>AutoComplete</span></p> </td> <td vAlign=top width=284> <p> </p> </td> </tr> </tbody> </table> <p><span>Scintilla</span><span>文档的每个字W都紧跟兌的样式信息。一个字节的字符信息和一个字节的样式信息作ؓ一个单位。样式信息高</span><span>3</span><span>位是指示器,?/span><span>5</span><span>位是索引受烦引号索引一个存放样式的数组。这样就可以表示</span><span>32</span><span>U基样式Q几乎包含所有语a的样式。三个无xC器可以一ơ显C法错误,非法命名Q和~进错误。关于样式的位可以通过</span><span>SCI_SETSTYLEBITS</span><span>来改变最多其?/span><span>7</span><span>位,剩下的位用于指示器?/span></p> <p><span>字符位置信息?/span><span>0</span><span>开始计敎ͼ?/span><span>nLen-1</span><span>Q中文的字符是两个字Wؓ一个文字,q样计数有误了Q?/span><span>DBCS</span><span>Q?/span></p> <p> </p> <p><span>Scintilla</span><span>的消息都是以</span><span>SCI_GETxxx</span><span>或?/span><span>SCI_SETxxx</span><span>来命名的</span></p> <p><span><span>一Q?/span></span><span>文本取回与修?/span></p> <p><span>主要消息有:</span></p> <p> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_185102 onclick="this.style.display='none'; Code_Closed_Text_185102.style.display='none'; Code_Open_Image_185102.style.display='inline'; Code_Open_Text_185102.style.display='inline';" height=16 src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_185102 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_185102.style.display='none'; Code_Closed_Image_185102.style.display='inline'; Code_Closed_Text_185102.style.display='inline';" height=16 src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_185102 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id=Code_Open_Text_185102 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">SCI_GETTEXT(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> length, </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">text)<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>SCI_SETTEXT(</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">unused</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">text)<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>SCI_SETSAVEPOINT<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>SCI_GETLINE(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> line, </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">text)<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>SCI_REPLACESEL(</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">unused</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">text)<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>SCI_SETREADONLY(</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000"> readOnly)<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>SCI_GETREADONLY<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>SCI_GETTEXTRANGE(</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">unused</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">, TextRange</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">tr)<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>SCI_ALLOCATE(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> bytes, </span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">unused</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">)<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>SCI_ADDTEXT(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> length, </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s)<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>SCI_ADDSTYLEDTEXT(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> length, cell </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s)<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>SCI_APPENDTEXT(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> length, </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s)<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>SCI_INSERTTEXT(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> pos, </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">text)<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>SCI_CLEARALL<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>SCI_CLEARDOCUMENTSTYLE<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>SCI_GETCHARAT(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> position)<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>SCI_GETSTYLEAT(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> position)<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>SCI_GETSTYLEDTEXT(</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">unused</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">, TextRange</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">tr)<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>SCI_SETSTYLEBITS(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> bits)<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>SCI_GETSTYLEBITS<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>SCI_TARGETASUTF8(</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">unused</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s)<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>SCI_ENCODEDFROMUTF8(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">utf8,</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">encoded)<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>SCI_SETLENGTHFORENCODE(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> bytes)<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span></span></div> <p> </p> <p><span>1</span><span>Q?/span><span>SCI_GETTEXT(int length, char *text)</span></p> <p><span>此函数可以取得控件中的字W串存到一个缓冲区Q这样就可以保存文档了。流E是使用</span><code><span>SCI_GETLENGTH</span></code><code><span>获得字符串的长度然后Ҏ取得的长度申请一个缓冲区Q再利用该消息取得文本,然后可以保存文本了Q同旉要利?/span></code><code><span>SCI_SETSAVEPOINT</span></code><code><span>标记文本已保存了?/span></code><code></code></p> <p><code> </code></p> <p><code><span>做了例子果然是可以运行的Q不知道作者是如何制作q样一个控件的。我对他的内部运行机制很感兴,想仔l看一些具体的代码Q而不是仅仅用它。另外发?/span></code><code><span>API</span></code><code><span>使用的字W是宽字W,q一点很令h讨厌?br><br>另外获取处理函数的过E用了上ơ写的typedef的用法,改一下看上去清晰多?br></p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">typedef </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">EditorSendFun)(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">);<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> ptr;<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top>EditorSendFun editsendmessage;</span></div> </span></code> <img src ="http://www.shnenglu.com/szhoftuncun/aggbug/56458.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/szhoftuncun/" target="_blank">沈臻?foxtail)</a> 2008-07-17 18:43 <a href="http://www.shnenglu.com/szhoftuncun/archive/2008/07/17/56458.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何使用Scintilla~辑控ghttp://www.shnenglu.com/szhoftuncun/archive/2008/07/13/56049.html沈臻?foxtail)沈臻?foxtail)Sun, 13 Jul 2008 13:07:00 GMThttp://www.shnenglu.com/szhoftuncun/archive/2008/07/13/56049.htmlhttp://www.shnenglu.com/szhoftuncun/comments/56049.htmlhttp://www.shnenglu.com/szhoftuncun/archive/2008/07/13/56049.html#Feedback0http://www.shnenglu.com/szhoftuncun/comments/commentRss/56049.htmlhttp://www.shnenglu.com/szhoftuncun/services/trackbacks/56049.html一Q?/span>如何在窗口中建立Scintilla~辑控g

1.       载入动态链接库

1hmod = LoadLibrary("SciLexer.DLL");
2if (hmod==NULL)
3{
4       MessageBox(hwndParent,
5       "The Scintilla DLL could not be loaded.",
6       "Error loading Scintilla",
7        MB_OK | MB_ICONERROR);
8}

9

2.       创徏H口Q已l注册)
hwndScintilla = CreateWindowEx(0,
               
"Scintilla","", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CLIPCHILDREN,
               
10,10,500,400,hwndParent,(HMENU)GuiID, hInstance,NULL);
二.如何控制H口cL?/span>

Ҏ一Q给控g发送消息和接受来自控g的响?/span>


SendMessage(hwndScintilla,sci_command,wparam,lparam);

Ҏ二:首先通过SCI_GETDIRECTFUNCTION ?/span> SCI_GETDIRECTPOINTER消息获取~辑控g回调函数的指针和W一个参敎ͼ接下来就可以直接使用~辑控g的消息处理函C?/span>

int (*fn)(void*,int,int,int);
void * ptr;
fn 
= (int (__cdecl *)(void *,int,int,int))SendMessage(hwndScintilla,SCI_GETDIRECTFUNCTION,0,0);
ptr 
= (void *)SendMessage(hwndScintilla,SCI_GETDIRECTPOINTER,0,0);
然后使用该回调函敎ͼ

fn(ptr,sci_command,wparam,lparam);
三.如何接受响应
只要在父H口消息处理函数中对WM_NOTIFY消息做相应处?/pre>

NMHDR *lpnmhdr;
[]
case WM_NOTIFY:
lpnmhdr 
= (LPNMHDR) lParam;
if(lpnmhdr->hwndFrom==hwndScintilla)
{
     
switch(lpnmhdr->code)
{
     
case SCN_CHARADDED:
       […]
        
break;
}
}

        
break;

整个q程没有M问题Q做好后是这个样子的Download?br>此时你会发现该控件你没有发送Q何消息就已经具备了一定的功能Q有redo undo操作Q还有复刉贴?/span>


沈臻?foxtail) 2008-07-13 21:07 发表评论
]]>windowsE序设计Q滚动条Q?/title><link>http://www.shnenglu.com/szhoftuncun/archive/2008/01/22/41675.html</link><dc:creator>沈臻?foxtail)</dc:creator><author>沈臻?foxtail)</author><pubDate>Tue, 22 Jan 2008 14:33:00 GMT</pubDate><guid>http://www.shnenglu.com/szhoftuncun/archive/2008/01/22/41675.html</guid><wfw:comment>http://www.shnenglu.com/szhoftuncun/comments/41675.html</wfw:comment><comments>http://www.shnenglu.com/szhoftuncun/archive/2008/01/22/41675.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/szhoftuncun/comments/commentRss/41675.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/szhoftuncun/services/trackbacks/41675.html</trackback:ping><description><![CDATA[     摘要: ׃屏幕不够昄Q滚动条成ؓ必备品。我们也习以为常了,如果没有滚动条,我们的电脑生zd没那么轻松了^_^。要d滚动条,我们必须知道客户区的信息Q客户区是不断变化的Q但是变化是就有WM_SIZE消息Q此时的lparam的高字节保存高度Q低字节保存宽度。获取办法如? caseWM_SIZE: &nb...  <a href='http://www.shnenglu.com/szhoftuncun/archive/2008/01/22/41675.html'>阅读全文</a><img src ="http://www.shnenglu.com/szhoftuncun/aggbug/41675.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/szhoftuncun/" target="_blank">沈臻?foxtail)</a> 2008-01-22 22:33 <a href="http://www.shnenglu.com/szhoftuncun/archive/2008/01/22/41675.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windows~程(输出文字)http://www.shnenglu.com/szhoftuncun/archive/2008/01/21/41565.html沈臻?foxtail)沈臻?foxtail)Mon, 21 Jan 2008 07:50:00 GMThttp://www.shnenglu.com/szhoftuncun/archive/2008/01/21/41565.htmlhttp://www.shnenglu.com/szhoftuncun/comments/41565.htmlhttp://www.shnenglu.com/szhoftuncun/archive/2008/01/21/41565.html#Feedback0http://www.shnenglu.com/szhoftuncun/comments/commentRss/41565.htmlhttp://www.shnenglu.com/szhoftuncun/services/trackbacks/41565.html阅读全文

沈臻?foxtail) 2008-01-21 15:50 发表评论
]]>
windows~程Q窗口与消息Q?/title><link>http://www.shnenglu.com/szhoftuncun/archive/2008/01/19/41479.html</link><dc:creator>沈臻?foxtail)</dc:creator><author>沈臻?foxtail)</author><pubDate>Sat, 19 Jan 2008 12:03:00 GMT</pubDate><guid>http://www.shnenglu.com/szhoftuncun/archive/2008/01/19/41479.html</guid><wfw:comment>http://www.shnenglu.com/szhoftuncun/comments/41479.html</wfw:comment><comments>http://www.shnenglu.com/szhoftuncun/archive/2008/01/19/41479.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/szhoftuncun/comments/commentRss/41479.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/szhoftuncun/services/trackbacks/41479.html</trackback:ping><description><![CDATA[     摘要: H口是屏q上的矩形区域,消息H口功能有限Q因为我们不能添加四个以上的按钮以及菜单{,而且d的按钮必Lwindows提供的按钮,不能自定义。所以我们有必要自己创徏一个多功能可自定义的窗口?自己的窗?创徏H口最重要的函数是CreateWindowQ它可以创徏重叠式窗口,弹出式窗口,子窗口等。而且可以自定义各U功能? ...  <a href='http://www.shnenglu.com/szhoftuncun/archive/2008/01/19/41479.html'>阅读全文</a><img src ="http://www.shnenglu.com/szhoftuncun/aggbug/41479.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/szhoftuncun/" target="_blank">沈臻?foxtail)</a> 2008-01-19 20:03 <a href="http://www.shnenglu.com/szhoftuncun/archive/2008/01/19/41479.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windowsE序设计(开?http://www.shnenglu.com/szhoftuncun/archive/2008/01/18/41443.html沈臻?foxtail)沈臻?foxtail)Fri, 18 Jan 2008 14:05:00 GMThttp://www.shnenglu.com/szhoftuncun/archive/2008/01/18/41443.htmlhttp://www.shnenglu.com/szhoftuncun/comments/41443.htmlhttp://www.shnenglu.com/szhoftuncun/archive/2008/01/18/41443.html#Feedback3http://www.shnenglu.com/szhoftuncun/comments/commentRss/41443.htmlhttp://www.shnenglu.com/szhoftuncun/services/trackbacks/41443.html阅读全文

沈臻?foxtail) 2008-01-18 22:05 发表评论
]]>
һ㽶þֻ| þþҹƷ| ݺݺݾþ| Ʒþþþû| þþƷĻ| þþƷž޾Ʒ| ŷ޾þþþƷ| avҹһƬѿþ| þù| 97þۺϾƷþþۺ| þɫۺҹž| ˾ھƷþþþ| պŷۺϾþ | ԾþþӰԺ| 97Ʒ˾þô߽app| ˼˼þ99ѾƷ6| þþƷֻоƷ2020| ޾Ʒþþþþþþþþþ | ɫݺݾþۺ| Ʒ۲ӰԺþ| þ99޸ۿҳ | þþûƬ| þСƵ| avҹһƬѿþ| ޹Ʒ˾þ| ŷպƷþþþ| Ʒ۲ӰԺþ| ۺþþ| þ99Ʒþþ| ˹ھƷþþþһ| 97Ʒ˾þþô߽97| һþöAV | ŷƷþþþþþο| þպƬ| ޾ƷþþþAV鶹| ŷһþþþþþô| ߳þѹۿ| ݾƷŮ˾þþþþ| ޾ҹþþþþ| ƷžžþþƷŮͬŷպۺ | þó18վ|