Windows mobile 透明/半透明控件组(皮肤控件)

news/2025/1/8 22:26:06/

 

关键词:Windows mobile 透明控件组(皮肤控件),YCtrls,YCode,Y控件,Y代码
本源码可以解决以下疑问:
windows mobile 下如何读写文件,如何读写Ini文件,如何绘图,如何显示图片,如何实现PNG图片,如何进行字符串处理,如何判断文件的存在,如何查找窗口,如何只运行一个程序实例,如何获取文件夹下的所有文件.......
版权声明
   本控件组版权归作者所有,未经同意,不得用于商业用途。任何人未经同意,不得擅自更改或在原基础上进行再次开发。
当前Windows mobile下的皮肤控件还很少,而且实现透明的更加少。本人曾经在Delphi开发过一套透明控件,于是决定把它移植到windows mobile系统下。在仿真器上和三星I718+上测试过,更换皮肤速度优化得相当快了,在Windows mobile下实属不易啊。
整套控件完全脱离MFC类,有自己的:CList、CString等组件类,所有控件由CWin这个透明窗体类派生,CWin派生CForm和CCtrl类,在CCtrl类上派生各个透明控件,有:CBtt(按钮控件)、CCheckBox、CRadioBox、CPanel、CLabel、CEdit、CWord、CPage、CGrid......,CApp为程序的应用类,担负了皮肤的加载等工作和处理系统消息的功能。
按钮控件有按下、放下、焦点、禁止四种状态,可以实现透明、半透明显示。图片可以是伸展方式或平铺方式显示,伸展方式可以自适应控件的大小。
希望本源码对初学Windows mobile编程的人有所帮助!
皮肤例子(以后会有更多皮肤):
1、蓝色经典
按此在新窗口浏览图片
2、绿色经典
按此在新窗口浏览图片
用VS调试,请设置外置卡目录到Skin下
源码下载:
http://d.download.csdn.net/down/1547405/guestcode
部分源码:
#include "YCtrls.h"
/*********************************************************************************************
*        CWin               *
*                        *
*  YCode Y代码 YCtrl Y控件 Windows Mobile 透明控件 2008 YCtrl 1.0       *
*   作者:代码客(卢益贵) QQ:48092788  http://blog.csdn.net/guestcode         *
*                        *
**********************************************************************************************/
CWin::CWin()
{
 m_cidClassID = CID_Y_WIN;
 m_hWnd = NULL;
 m_nLeft = 0;
 m_nTop = 26;
m_nWidth = 240;
 m_nHeigth = 320 - 26;
 m_wsWinState = WS_Y_NORMAL;
 m_rcClientRect.left = 0;
 m_rcClientRect.top = 0;
 m_rcClientRect.right = m_nWidth;
 m_rcClientRect.bottom = m_nHeigth;
 m_hBitmap = NULL;
 m_hDC = NULL;
 m_pCtrls = new CList;
 m_pParent = NULL;
 m_pOwner = NULL;
 m_bEnabled = TRUE;
 m_bStretch = TRUE;
 m_pszText = NULL;
 m_nTextLen = 0;
 m_hFont = NULL;
 m_clTextColor = 0xFFFF00;
 m_dwMouseState = 0;
 m_hPen = NULL;
}
CWin::~CWin()
{
 CWin *pWin;
 while( GetCtrlCount() )
 {
  pWin = GetCtrl( 0 );
  delete pWin;
 }
if( m_pParent )
  m_pParent->DeleteCtrl( this );
if( m_pCtrls )
  delete m_pCtrls;
if( m_hWnd )
        DestroyWindow( m_hWnd );
 if( m_hBitmap )
   DeleteObject( m_hBitmap );
 if( m_hDC )
  DeleteDC( m_hDC );
 
 if( m_pszText )
  free( (void *)m_pszText );
 if( m_hFont )
  DeleteObject( m_hFont );
 if( m_hPen )
  DeleteObject( m_hPen );
}
void CWin::OnCreated( void )
{
}
void CWin::CreateStyle( pCREATESTYLE pCreateStyle )
{
 pCreateStyle->dwStyle = WS_VISIBLE;
 pCreateStyle->dwExStyle = 0;
}
void CWin::CreateBitmap( void )
{
 if( !m_hWnd )
  return;
 if( m_hBitmap )
   DeleteObject( m_hBitmap );
 if( !m_hDC )
  m_hDC = CreateCompatibleDC( GetDC( m_hWnd ) );
 if( m_hBitmap )
   DeleteObject( m_hBitmap );
 m_hBitmap = CreateCompatibleBitmap( GetDC( m_hWnd ), m_nWidth, m_nHeigth );
 SelectObject( m_hDC, m_hBitmap );
}
BOOL CWin::Create( CWin *pOwner, CWin *pParent, HMENU hMenu, int nLeft, int nTop, int nWidth, int nHeigth,
       LPCWSTR lpszClassName, LPCWSTR lpszCaption )
{
 HWND   hParent;
m_pParent = pParent;
 m_pOwner = pOwner;
 if( NULL == pParent )
  hParent = NULL;
 else
 {
  hParent = pParent->GetHandle();
  m_pParent->AddCtrl( this );
 }
CREATESTYLE cs;
 CreateStyle( &cs );
    m_hWnd = CreateWindowEx( cs.dwExStyle, lpszClassName,  lpszCaption,  cs.dwStyle,
        nLeft, nTop, nWidth, nHeigth, hParent,  hMenu, g_pApp->GetInstance(), (PVOID)this );
 
 m_nTextLen = lstrlen( lpszCaption );
 m_pszText = (WCHAR *)malloc( m_nTextLen * 2 + 2 );
 lstrcpy( m_pszText, lpszCaption );
 if( m_hWnd )
 {
  m_nLeft = nLeft;
  m_nTop = nTop;
  m_nWidth = nWidth;
  m_nHeigth = nHeigth;
  GetClientRect( m_hWnd, &m_rcClientRect );
  SetWindowLong( m_hWnd, GWL_USERDATA, (LONG) this );
  if( SetWindowLong( m_hWnd, GWL_USERDATA, (LONG) this ) )
  {
   GetObject( (HFONT) GetStockObject(SYSTEM_FONT), sizeof(LOGFONT), &m_lFont );
   m_hFont = CreateFontIndirect( &m_lFont );
   CreateBitmap();
   OnCreated();
   OnDraw();
   return TRUE;
  }
 }
 
 return FALSE;  
}
LRESULT CWin::WindowProc( HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam )
{
 LRESULT r;
switch( uMsg )
    {
  case WM_PAINT:
   OnPaint( hWnd );
   return 0;
  case WM_LBUTTONDOWN:
   m_dwMouseState = MS_Y_DOWN;
   return DefWindowProc( hWnd, uMsg, wParam, lParam );
  case WM_LBUTTONUP:   
   r = DefWindowProc( hWnd, uMsg, wParam, lParam );
   if( (m_dwMouseState & MS_Y_DOWN) && (((short)LOWORD(lParam)) >= 0) && (((short)LOWORD(lParam))  <= m_nWidth) &&
    (((short)HIWORD(lParam)) >= 0) && (((short)HIWORD(lParam)) <= m_nHeigth) )
    SendMessage( m_hWnd, WM_LBUTTonCLICK, 0, 0);
   m_dwMouseState &= (~(MS_Y_DOWN | MS_Y_MOVE));
   return r;
  case WM_MOUSEMOVE:
   if( (((short)LOWORD(lParam)) < 0) || (((short)LOWORD(lParam)) > m_nWidth) || (((short)HIWORD(lParam)) < 0) || (((short)HIWORD(lParam)) > m_nHeigth) )
   {
    m_dwMouseState &= (~MS_Y_MOVE);
    SendMessage( m_hWnd, WM_MOUSELEAVE, 0, 0);    
   }else
    m_dwMouseState |= MS_Y_MOVE;
   return DefWindowProc( hWnd, uMsg, wParam, lParam );
  case WM_MOVE:
   m_wsWinState = WS_Y_MOVE;
   m_nLeft = (int)LOWORD(lParam);
   m_nTop = (int)HIWORD(lParam);
   r = DefWindowProc( hWnd, uMsg, wParam, lParam );
   if( m_pParent )
    m_pParent->OnPaint();
   ChangeSkin();
   return r;
  case WM_SIZE:
   switch( wParam )
   {
    case SIZE_MINIMIZED:
     m_wsWinState = WS_Y_MIN;
     break;
    case SIZE_MAXIMIZED:
     m_wsWinState = WS_Y_MAX;
     break;
    case SIZE_MAXSHOW:
     m_wsWinState = WS_Y_MAXSHOW;
     break;
    case SIZE_MAXHIDE:
     m_wsWinState = WS_Y_MAXHIDE;
     break;
    default:
     m_wsWinState = WS_Y_NORMAL;
   }
   m_nWidth = (int)LOWORD(lParam);
   m_nHeigth = (int)HIWORD(lParam);
   GetClientRect( hWnd, &m_rcClientRect );
   r = DefWindowProc( hWnd, uMsg, wParam, lParam );   
   if( m_pParent )
    m_pParent->OnPaint();
   CreateBitmap();
   ChangeSkin();
   return r;
  case WM_GETTEXT:
   if( m_nTextLen < (int) wParam )
   {
    memcpy( (void *)lParam, (void *)m_pszText, (int) m_nTextLen * 2 );
    ((WCHAR *)lParam)[(int) m_nTextLen] = 0;
   }else
   {
    memcpy( (void *)lParam, (void *)m_pszText, (int) wParam * 2 );
    ((WCHAR *)lParam)[(int) wParam] = 0;
   }
   return 0;
  case WM_SETTEXT:
   if( m_pszText )
    free( (void *)m_pszText );
   m_nTextLen = lstrlen( (WCHAR *)lParam );
   m_pszText = (WCHAR *) malloc( m_nTextLen + 2 );
   lstrcpy( m_pszText, (WCHAR *)lParam );
   return 0;
  case WM_GETTEXTLENGTH:
   return m_nTextLen;
        default:
   return DefWindowProc( hWnd, uMsg, wParam, lParam );
    } 
}
LRESULT CALLBACK CWin::WinProc( HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam )
{
 CWin *pThis;
pThis = (CWin*) GetWindowLong( hWnd, GWL_USERDATA );
    if( pThis )
    {
        return pThis->WindowProc( hWnd, uMsg, wParam, lParam );
    }
return DefWindowProc( hWnd, uMsg, wParam, lParam );
}
BOOL CWin::RegClass( LPCWSTR lpszClassName )
{
 WNDCLASS    wc;
ZeroMemory( &wc, sizeof( wc ));
 wc.lpfnWndProc = CWin::WinProc;
    wc.hInstance = g_pApp->GetInstance();
    wc.lpszClassName = lpszClassName;
 wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
 if( NULL == RegisterClass( &wc ))
        return FALSE;
 else
  return TRUE;
}
void CWin::OnDraw( void )
{
}
void CWin::OnPaint( HDC hdc )
{
 BitBlt( hdc, 0, 0, m_nWidth, m_nHeigth, m_hDC, 0, 0, SRCCOPY );
}
void CWin::OnPaint( HWND hWnd )
{
 HDC hdc;
 PAINTSTRUCT ps;
 hdc = BeginPaint(hWnd, &ps);
 OnPaint( hdc ); 
 EndPaint(hWnd, &ps);
}
void CWin::OnPaint( void )
{
 HDC hdc;
hdc = GetDC( m_hWnd );
 OnPaint( hdc ); 
 ReleaseDC( m_hWnd, hdc );
}
void CWin::Invalidate( void )
{
 if( m_hWnd )
 {
  OnDraw();
  OnPaint();
  //InvalidateRect( m_hWnd , &m_rcClientRect, TRUE );
 }
}
void CWin::GetCtrlBKGND( CWin *pCtrl, HDC hdc )
{
 POINT p;
 p.x = 0;
 p.y = 0;
 ClientToScreen( pCtrl->GetHandle(), &p);
 ScreenToClient( m_hWnd, &p);
 BitBlt( hdc, 0, 0, pCtrl->GetWidth(), pCtrl->GetHeigth(), m_hDC, p.x, p.y, SRCCOPY );
}
HWND CWin::GetHandle(void)
{
 return m_hWnd;
}
void CWin::SetParent( CWin *pParent )
{
 if( (m_pParent != pParent) && pParent )
 {
  if( m_pParent )
   m_pParent->DeleteCtrl( this );
  m_pParent = pParent;
  m_pParent->AddCtrl( this );
  ::SetParent( m_hWnd, m_pParent->GetHandle() );
  Invalidate();
 }
}
CWin *CWin::GetParent( void )
{
 return m_pParent;
}
CWin *CWin::GetOwner( void )
{
 return m_pOwner;
}
int CWin::GetLeft( void )
{
 return m_nLeft;
}
int CWin::GetTop( void )
{
 return m_nTop;
}
int CWin::GetWidth( void )
{
 return m_nWidth;
}
int CWin::GetHeigth( void )
{
 return m_nHeigth;
}
void CWin::SetPos( int nLeft, int nTop, int nWidth, int nHeigth )
{
 m_nLeft = nLeft;
 m_nTop = nTop;
 m_nWidth = nWidth;
 m_nHeigth = nHeigth;
 if( m_pParent )
  m_pParent->OnPaint();
 MoveWindow( m_hWnd, nLeft, nTop, nWidth, nHeigth, TRUE );
 Invalidate();
}
void  CWin::AddCtrl( CWin *pCtrl )
{
 m_pCtrls->Add( pCtrl );
}
void  CWin::DeleteCtrl( CWin *pCtrl )
{
 m_pCtrls->Delete( pCtrl );
}
int  CWin::GetCtrlCount( void )
{
 return m_pCtrls->GetCount();
}
CWin *CWin::GetCtrl( int nIndex )
{
 return (CWin *)m_pCtrls->GetItem( nIndex );
}
void CWin::SetVisible( BOOL bVisible )
{
 if( bVisible != GetVisible() )
  ShowWindow( m_hWnd, bVisible );
}
BOOL CWin::GetVisible( void )
{
 return IsWindowVisible( m_hWnd );
}
void CWin::SetEnabled( BOOL bEnabled )
{
 if( bEnabled != GetEnabled() )
 {
  EnableWindow( m_hWnd, bEnabled );
  OnDraw();
  OnPaint();
 }
}
BOOL CWin::GetEnabled( void )
{
 return IsWindowEnabled( m_hWnd );
}
void CWin::SetStretch( BOOL bStretch )
{
 if( m_bStretch != bStretch )
 {
  m_bStretch = bStretch;
  ChangeSkin();
 }
}
BOOL CWin::GetStretch( void )
{
 return m_bStretch;
}
void CWin::ChangeSkin( void )
{
 int i; 
 Invalidate();
 for( i = 0; i < GetCtrlCount(); i++ )
  GetCtrl( i )->ChangeSkin();
}
LOGFONT CWin::GetFont( void )
{
 return m_lFont;
}
void CWin::SetFont( LOGFONT * lFont )
{
 m_lFont = *lFont;
 if( m_hFont )
  DeleteObject(m_hFont);
 m_hFont = CreateFontIndirect( &m_lFont );
 SelectFont( GetDC( m_hWnd ), m_hFont );
 Invalidate();
}
void CWin::SetTextColor( COLORREF clTextColor )
{
 if( m_clTextColor != clTextColor )
 {
  m_clTextColor = clTextColor;
  Invalidate();
 }
}
COLORREF CWin::GetTextColor( void )
{
 return m_clTextColor;
}
LPCWSTR CWin::GetText( void )
{
 return m_pszText;
}
int CWin::GetTextLen( void )
{
 return m_nTextLen;
}
void CWin::SetText( LPCWSTR lpszText )
{
 SendMessage( m_hWnd, WM_SETTEXT, lstrlen( lpszText ), (UINT) lpszText );
}

DWORD CWin::GetClassID( void )
{
 return m_cidClassID;
}

http://www.ppmy.cn/news/567800.html

相关文章

QQ2012Beta1_1.82.4428.0登录界面和皮肤透明化修改------具体的文件修改方法

QQ2012请往下拉 废话不多说&#xff0c;直接进入正题&#xff0c;先上几张效果图&#xff01;&#xff01;&#xff01; 以上呢就是我所用的了&#xff0c;自己可以根据自己的喜好&#xff0c;剪辑好的图片换上去&#xff0c;分辨率好像没什么要求&#xff0c;但不要太小了&a…

Winform窗体半透明,控件不透明,及皮肤美化效果

先看效果图&#xff1a; 其实网上实现窗体半透明&#xff0c;控件不透明的方法很多&#xff0c;能用微软的API做出效果固然很好&#xff0c;然而其实现方法上有点点复杂&#xff0c;我个人没怎么去深究这个问题&#xff0c;因为我只想实现这个效果而已&#xff0c;选择一个简单…

QQ透明皮肤:多层算法,一键适配各种背景 .

那些流连过的风景&#xff0c;那个长存于心的人&#xff0c;那些一心向往的美好&#xff0c;或是那句曾让人恍然的话语。动人的画面&#xff0c;我们不止想要印在脑海&#xff0c;更希望它们跃然屏幕。当QQ变为生活的一部分&#xff0c;特别的皮肤也可以是记忆的指针&#xff0…

如何更换及自制QQ皮肤?

好消息&#xff0c;腾讯新推出 QQ皮肤编辑器&#xff0c;界面亲切、友好&#xff0c;拥有所见即所得编辑环境&#xff0c;方便大家更轻松完成QQ皮肤的整个制作过程。此外还提供了皮肤预览&#xff0c;可以更便捷的在QQ上随时查看新皮肤的实际效果。设计QQ皮肤变得很简单了,马上…

VS2017透明背景和皮肤设置

先贴出效果图: 需要2个插件,如图: 在工具>更新和拓展,输入名称下载 claudiaIde color theme editor for vs 2017 图片设置: 安装好插件后,在工具>选项,设置背景图,PS:看图片效果而定 最后在工具下打开customize colors 选自己喜欢的主色调,点击右上角创建和复制主…

全透明qq

本人现有一种让你的qq&#xff0c;无论是登陆界面还是聊天界面变为全透明的方法&#xff0c;现特此与大家分享。效果图如下&#xff1a; QQ界面 界面只要你想可以全凭你的审美更改。 聊天界面&#xff1a; 另外还有登陆界面和设置界面现在不一详细论述了望各位谅解。 方法如下…

碉堡了!体验QQ自带“全透明”皮肤!

“透明”一直是美化控们的终极目标&#xff0c;网上经常能够看到各种大大们自己制作的QQ全透明皮肤。不过你能想到最新版QQ 2012已经自带全透明皮肤了吗&#xff1f;而且我要告诉你的是&#xff0c;腾讯的这次“透明”并不限于某款皮肤&#xff0c;而是可以应用在任何一款已有的…

设置透明QQ头像

准备一张白色的图片&#xff0c;然后进入http://imgcache.qq.com/club/face/webface/uploadface.html&#xff0c;上传白色的头像&#xff0c;就会变透明&#xff0c;是透明不是白色