Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 软件时空 > 软件相关 > WinCE 开发自定义控件
【标  题】:WinCE 开发自定义控件
【关键字】:WinCE
【来  源】:http://blog.csdn.net/prince0823/archive/2007/04/14/1564844.aspx

WinCE 开发自定义控件

Your Ad Here

最近项目需要在SmartPhone上实现一个HyperLink的功能,显然win32的控件里没有现成的,只有自己开发一个

首先注册一个窗口类

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPTSTR    lpCmdLine,
                   
int       nCmdShow)
{

……

   
if (!HyperLinkRegisterClass(hInstance)
    
{
         
return FALSE;
    }


……

}


ATOM HyperLinkRegisterClass(HINSTANCE hInstance)
{


 WNDCLASS wndclass;

 wndclass.style    
= CS_HREDRAW | CS_VREDRAW ;
 wndclass.lpfnWndProc        
= HyperLinkWndProc;
 wndclass.cbClsExtra         
= 0;
 wndclass.cbWndExtra         
= 0;
 wndclass.hInstance          
= hInstance;
 wndclass.hIcon              
= NULL;
 wndclass.hCursor            
= LoadCursor (NULL, IDC_ARROW);
 
//wndclass.hbrBackground      = (HBRUSH) (COLOR_BTNFACE + 1) ;
 wndclass.hbrBackground      = (HBRUSH) (COLOR_WINDOW + 1);
 
//wndclass.hbrBackground      = (HBRUSH) GetStockObject (WHITE_BRUSH);
 wndclass.lpszMenuName       = NULL;
 wndclass.lpszClassName      
= TEXT("CtlHyperLink");

 
return RegisterClass (&wndclass) ;


}

然后处理控件的各种消息达到自己想要的效果

 

LRESULT CALLBACK HyperLinkWndProc (HWND hwnd, UINT message,WPARAM wParam, LPARAM lParam)
{

 LONG ID;

 
switch (message)
 
{

 
case   WM_PAINT:

  ID
= (LONG)GetWindowLong (hwnd, GWL_ID);

  
for(int i=0;i<CAPTION_INDEX_LENGTH;i++)
   
if(HYPERLINK_CAPTION_INDEX[i] == ID)
   
{
    pszText 
= HYPERLINK_CAPTION[i];

    
if(bHyperLinkSelect[i])
     RenderHyperLink(hwnd,TRUE);
    
else
     RenderHyperLink(hwnd,FALSE);
   }

  

  
return 0 ;
 
case WM_SETFOCUS:
  
/*RenderHyperLink(hwnd,TRUE); */
  ID
= (LONG)GetWindowLong (hwnd, GWL_ID);

  
for(int i=0;i<CAPTION_INDEX_LENGTH;i++)
   
if(HYPERLINK_CAPTION_INDEX[i] == ID)
   
{
    bHyperLinkSelect[i] 
= TRUE;
   }



  InvalidateRect(hwnd, NULL, 
true);

  SendMessage(hwnd, WM_PAINT, GetWindowLong (hwnd, GWL_ID), (LPARAM) hwnd);

 
return 0 ;

 
case WM_KILLFOCUS:
  
/*RenderHyperLink(hwnd,TRUE); */
  ID
= (LONG)GetWindowLong (hwnd, GWL_ID);

  
for(int i=0;i<CAPTION_INDEX_LENGTH;i++)
   
if(HYPERLINK_CAPTION_INDEX[i] == ID)
   
{
    bHyperLinkSelect[i] 
= FALSE;
   }


  InvalidateRect(hwnd, NULL, 
true);

  SendMessage(hwnd, WM_PAINT, GetWindowLong (hwnd, GWL_ID), (LPARAM) hwnd);

 
return 0 ;

    
case   WM_KEYUP:
        
                  
if (wParam != VK_SPACE)
        
  
break ;// fall through

 
/*case WM_KEYUP:

  SendMessage (GetParent (hwnd), WM_COMMAND,
  GetWindowLong (hwnd, GWL_ID), (LPARAM) hwnd) ;

 return 0 ;

 case WM_KEYDOWN:

  SendMessage (GetParent (hwnd), WM_COMMAND,
  GetWindowLong (hwnd, GWL_ID), (LPARAM) hwnd) ;

 return 0 ;
*/

 
//case WM_KEYDOWN:

 

 
// return 0 ;

 
case   WM_LBUTTONUP :

  SendMessage (GetParent (hwnd), WM_COMMAND,
  GetWindowLong (hwnd, GWL_ID), (LPARAM) hwnd) ;

  
return 0 ;
 }


 
return DefWindowProc (hwnd, message, wParam, lParam) ;

}


 
int RenderHyperLink(HWND hwnd,BOOL bSelect)
{
  LOGFONT  ft;
  HFONT  hFontNew, hFontOld;
  HBRUSH      hBrush;
  HDC         hdc;
  PAINTSTRUCT  ps;
  RECT                         rect;

  GetClientRect (hwnd, 
&rect);


  hdc 
= BeginPaint (hwnd, &ps);

  hBrush 
= CreateSolidBrush (GetSysColor (COLOR_WINDOW)) ;
  hBrush 
= (HBRUSH) SelectObject (hdc, hBrush) ;

  FillRect(hdc,
&rect,hBrush);

  memset(
&ft, 0sizeof(ft));
  wcscpy(ft.lfFaceName, TEXT(
"宋体")); //fonttype     
  ft.lfHeight  = 16;           //fontsize
  ft.lfUnderline = TRUE;
  
  
   

  hFontNew 
= CreateFontIndirect(&ft);
  hFontOld 
= (HFONT)SelectObject(hdc, hFontNew);  
  
  
if(bSelect)
  
{
   SetBkColor (hdc, GetSysColor (COLOR_WINDOW));
   SetTextColor (hdc, (COLORREF)
0x000000FF);
  }

  
else
  
{
   SetBkColor (hdc, GetSysColor (COLOR_WINDOW));
   SetTextColor (hdc, GetSysColor (COLOR_WINDOWTEXT));
  }



  DrawText (hdc, pszText, 
-1&rect,
   DT_SINGLELINE 
| DT_LEFT );

  
//SetWindowLong(hwnd,GWL_STYLE,WS_CAPTION);
  SelectObject(hdc, hFontOld);
  DeleteObject (SelectObject (hdc, hBrush)) ;

  EndPaint (hwnd, 
&ps) ;
  
return 0;
}


最后,在RC编辑器里托一个Custom Control到Dialog上,在Class属性里填写CtlHyperLink

OpenSG节点核心:【上一篇】
数字家园的宏观概念:【下一篇】
【相关文章】
  • WinCE圆圈消息
  • 浅谈wince应用程序的可移植性
  • VS2005调试嵌入式WINCE目标设备程序的连接方式
  • 漫谈WinCE输入法的编写(四)
  • WinCE系统音量的设置
  • wince下设置目标机器的分辨率
  • FTP数据上传及WinCE系统FTP根目录设定
  • WINCE的编程忠告
  • 漫谈WinCE输入法的编写(三)
  • wince下创建不规则窗口
  • 【随机文章】
  • 系统中图片存储的解决方案——将图片放在服务器上,将其路径存入数据库
  • That's Why (You Go Away)
  • windows XP下的向量化异常处理
  • VPN基础知识总结
  • 用PHP连接Oracle数据库
  • SynEdit v1.1 (源代码编辑器组件)
  • IDS中的数据分析技术简述
  • linux下C语言编程
  • 需求工程概述
  • 【分享】【09-27】注册精品软件下载
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.