windows开发记事本程序纪实(二)逻辑篇1(3)

::LoadLibrary(T("riched20.dll"));

MAIN的properties中:

此时再运行程序时,可以正常启动记事本了,且能够在richedit中进行编辑,效果如图3所示:


图3 手动加载Riched20.dll后出现主界面窗口

      在启动主界面后,可以正常进行编辑。貌似这个控件可以正常工作了。但在实际测试时,发现了以下几个问题:

1. 界面运行后RichEdit边框棱角过于分明

    处理方法: Richedit控件的properties  -> Boarder –> Flase

2.输入Enter 不能换行(手动输入时一直在同一行编辑)

   处理方法: Richedit控件的properties  -> Multiline–> True

                      Richedit控件的properties  -> Want Return–> True

3. 没有滚动条(横向以及纵向的)

    这个在主界面属性上,IDD

   处理方法: IDD_MAIN-> properties  -> Horizontal Scrollbar–> True

                      IDD_MAIN –> properties  -> Vertical Scrollbar–> True

4. 不能随窗口大小伸缩

    在对窗口进行伸缩时,RichEdit控件的大小还是保持原来的大小,如图4所示:


图4 主界面大小变化时RichEdit控件大小不变

    这个问题其实很好理解,因为伸缩主界面窗口时,windows将发送WM_SIZE消息通知窗口。这个过程类似于windows对主界面窗口说“hi, 你的大小已经变了,你根据改变后的大小变一下”。现在我们的主窗口过程处理函数中并没有针对WM_SIZE消息对RichEdit进行特殊处理,因此主界面下面的RichEdit一直保持自己原来的大小,才会出现上面的情况。那么具体的解决方案为:在InitDialog中添加RichEdit大小自适应功能,同时针对WM_SIZE消息,添加Main_OnSize函数来处理这种独立的控件。具体的代码实现如下:

void CMainWnd::Main_OnSize( HWND hWnd, UINT state, int cx, int cy )
{
 RECT stRect;
 ::GetClientRect(hWnd, &stRect); // 获取窗口客户区大小
</span><span style="color: #008000">//</span><span style="color: #008000"> 将RichEdit大小调整为客户区大小</span>
 ::MoveWindow(::GetDlgItem(hWnd, IDC_RICHEDIT), stRect.left, stRect.top,
 stRect.right-stRect.left, stRect.bottom-stRect.top, TRUE);
}
      

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/1593.html