⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 list.c

📁 深圳市微逻辑电子有限公司 巨果&#8226 Kingmos&reg 系统核心
💻 C
📖 第 1 页 / 共 5 页
字号:
			    RedrawItem( lpListData, hWnd, dwStyle, hdc, index, lpListData->count, TRUE );
			ReleaseListDC( hWnd, hdc, NULL );//ReleaseDC( hWnd, hdc );	//
			ReflashScrollBar( hWnd, dwStyle, lpListData );
		}

        //if( cur >= 0 )
            //DoSETCURSEL( hWnd, cur, FALSE );
    }
    return retv;
}

// **************************************************
// 声明:static LRESULT DoDIR( HWND hWnd, WORD attrib, LPCSTR lpName )
// 参数:
//	IN hWnd - 窗口句柄
//	IN attrib - 文件属性
//	IN lpName - 文件名
// 返回值:
//	假如成功,返回最后增加的项目索引号; 否则,假如没有内存, 返回LB_ERRSPACE, 其它错误返回LB_ERR
// 功能描述:
//	增加文件或文件夹中的文件到列表框
//	处理 LB_DIR
// 引用: 
//	
// ************************************************

static LRESULT DoDIR( HWND hWnd, WORD attrib, LPCSTR lpName )
{
    return LB_ERR;
}

// **************************************************
// 声明:static LRESULT DoFINDSTRING( HWND hWnd, int indexStart, LPCSTR lpFindStr, BOOL bExact )
// 参数:
//	IN hWnd - 窗口句柄 
//	IN indexStart - 搜索的起始索引号 
//	IN lpFindStr - 需要匹配的字符串 
//	IN bExact - 是否精确匹配(精确匹配意味其长度也要匹配)
// 返回值:
//	假如成功,返回项目索引号; 否则,返回LB_ERR
// 功能描述:
//	搜索匹配的项目
//	处理 LB_FINDSTRING 和 LB_FINDSTRINGEXACT
// 引用: 
//	
// ************************************************

static LRESULT DoFINDSTRING( HWND hWnd, int indexStart, LPCSTR lpFindStr, BOOL bExact )
{
    _LPLISTDATA lpListData = (_LPLISTDATA)GetWindowLong( hWnd, 0 );//得到列表框窗口的列表框数据对象指针
    short i;
    DWORD dwStyle = GetWindowLong( hWnd, GWL_STYLE );//得到列表框风格

    _ASSERT( lpListData );
    if( indexStart == -1 )
        indexStart = 0;	//从0开始
	// 从indexStart开始搜索所有的项目
    for( i = 0; i < lpListData->count; i++, indexStart++ )
    {
        if( indexStart >= lpListData->count )
            indexStart = 0;	// 如果没有搜索完所有的项目,从第一个开始
        if( dwStyle & LBS_HASSTRINGS )
        {	// 字符串类型
            if( bExact )
			{	// 精确匹配
                if( stricmp( At( lpListData, indexStart )->lpszItem, lpFindStr ) == 0 )
                    return indexStart;
			}
			else
			{	// 查找字符串
                if( strstr( At( lpListData, indexStart )->lpszItem, lpFindStr ) )
                    return indexStart;
			}
        }
        else if( dwStyle & (LBS_OWNERDRAWFIXED|LBS_OWNERDRAWVARIABLE) )
        {	// 用户数据
			if( At( lpListData, indexStart )->dwItemData == (DWORD)lpFindStr )
                return indexStart;
        }
        else
            break; // error
    }
    return LB_ERR;
}

// **************************************************
// 声明:static LRESULT DoGETANCHORINDEX( HWND hWnd )
// 参数:
//	IN hWnd - 窗口句柄
// 返回值:
//	假如成功,返回列表框被选择项目中的第一个项目索引; 否则,返回LB_ERR
//	
// 功能描述:
//	得到列表框被选择项目中的第一个项目索引(用于多行选择)
//	处理 LB_GETANCHORINDEX 消息
// 引用: 
//	
// ************************************************

static LRESULT DoGETANCHORINDEX( HWND hWnd )
{	//得到列表框窗口的列表框数据对象指针
    _LPLISTDATA lpListData = (_LPLISTDATA)GetWindowLong( hWnd, 0 );
    int i;

    _ASSERT( lpListData );
    for( i = 0; i < lpListData->count; i++ )
    {
        if( At( lpListData, i )->state & ODS_SELECTED )
            return i;		//找到
    }
    return LB_ERR;
}

// **************************************************
// 声明:static LRESULT DoGETCARETINDEX( HWND hWnd )
// 参数:
//	IN hWnd - 窗口句柄
// 返回值:
//	假如成功,返回列表框被选择项目中的最后一个项目索引; 否则,返回LB_ERR
// 功能描述:
//	得到列表框被选择项目中的最后一个项目索引(用于多行选择)
//	处理 LB_GETCARETINDEX
// 引用: 
//	
// ************************************************

static LRESULT DoGETCARETINDEX( HWND hWnd )
{	//得到列表框窗口的列表框数据对象指针
    _LPLISTDATA lpListData = (_LPLISTDATA)GetWindowLong( hWnd, 0 );
    _ASSERT( lpListData );
    return lpListData->caret;
}

// **************************************************
// 声明:static LRESULT DoGETCOUNT( HWND hWnd )
// 参数:
//	IN  hWnd - 窗口句柄
// 返回值:
//	假如成功,返回列表框的项目总数; 否则,返回LB_ERR
// 功能描述:
//	得到列表框的项目总数
//	处理 LB_GETCOUNT
// 引用: 
//	
// ************************************************

static LRESULT DoGETCOUNT( HWND hWnd )
{	//得到列表框窗口的列表框数据对象指针
    _LPLISTDATA lpListData = (_LPLISTDATA)GetWindowLong( hWnd, 0 );
    _ASSERT( lpListData );
    return Count( lpListData );
}

// **************************************************
// 声明:static LRESULT DoGETCURSEL( HWND hWnd )
// 参数:
//	IN hWnd - 窗口句柄
// 返回值:
//	假如成功,返回列表框被选择项目中的有焦点的项目索引; 否则,返回LB_ERR
//	
// 功能描述:
//	如果列表框是多行选择风格,得到列表框被选择项目中的有焦点的项目索引
//	如果列表框是单行选择风格,得到列表框被选择项目的项目索引
//	处理 LB_GETCURSEL 消息
// 引用: 
//	
// ************************************************

static LRESULT DoGETCURSEL( HWND hWnd )
{	// 得到窗口风格
    DWORD dwStyle = GetWindowLong( hWnd, GWL_STYLE );
    //得到列表框窗口的列表框数据对象指针
	_LPLISTDATA lpListData = (_LPLISTDATA)GetWindowLong( hWnd, 0 );
    int i;

    _ASSERT( lpListData );

    if( dwStyle & LBS_MULTIPLESEL )
    {	// 多行选择风格
        for( i = 0; i < lpListData->count; i++ )
        {	
            if( At( lpListData, i )->state & ODS_FOCUS )
                return i;	//
        }
    }
    else
    {   // 单行选择 single-sel style
        return lpListData->curSel;
    }
    return LB_ERR;
}

// **************************************************
// 声明:static LRESULT DoGETHORIZONTALEXTENT( HWND hWnd )
// 参数:
//	IN hWnd - 窗口句柄
// 返回值:
//	假如成功,返回列表框的水平宽度; 否则,返回LB_ERR
//	
// 功能描述:
//	得到之前调用 LB_SETHORIZONTALEXTENT 设置的水平宽度
//	处理 LB_GETHORIZONTALEXTENT 消息
// 引用: 
//	
// ************************************************

static LRESULT DoGETHORIZONTALEXTENT( HWND hWnd )
{
    return LB_ERR;
}

// **************************************************
// 声明:static LRESULT DoGETITEMDATA( HWND hWnd, int index )
// 参数:
//	IN hWnd - 窗口句柄
//  IN index - 项目索引
// 返回值:
//	假如成功,返回列表框项目的项目数据; 否则,返回LB_ERR
// 功能描述:
//	得到列表框项目的项目数据
//	处理 LB_GETITEMDATA 消息
// 引用: 
//	
// ************************************************

static LRESULT DoGETITEMDATA( HWND hWnd, int index )
{	//得到列表框窗口的列表框数据对象指针
    _LPLISTDATA lpListData = (_LPLISTDATA)GetWindowLong( hWnd, 0 );

    _ASSERT( lpListData );
    if( (DWORD)index < lpListData->count )
    {	// 有效的索引
		return (LRESULT)At( lpListData, index )->dwItemData;
    }
    return LB_ERR;
}

// **************************************************
// 声明:static LRESULT DoGETITEMHEIGHT( HWND hWnd, int index )
// 参数:
//	IN hWnd - 窗口句柄
//  IN index - 项目索引
// 返回值:
//	假如成功,返回列表框项目的项目高度; 否则,返回LB_ERR
// 功能描述:
//	得到列表框项目的项目高度( 列表框必须有 LBS_OWNERDRAWVARIABLE 风格;否则index必须为0 )
//	处理 LB_GETITEMHEIGHT 消息
// 引用: 
//	
// ************************************************

static LRESULT DoGETITEMHEIGHT( HWND hWnd, int index )
{	// 得到窗口风格
    DWORD dwStyle = (DWORD)GetWindowLong( hWnd, GWL_STYLE );
    //得到列表框窗口的列表框数据对象指针
	_LPLISTDATA lpListData = (_LPLISTDATA)GetWindowLong( hWnd, 0 );

    _ASSERT( lpListData );
    if( (DWORD)index < lpListData->count )
    {	
        if(  dwStyle & LBS_OWNERDRAWVARIABLE )
            return At( lpListData, index )->typeData;
        else if( index == 0 )
            return lpListData->rowHeight;
    }
    return LB_ERR;
}

// **************************************************
// 声明:static LRESULT DoGETITEMRECT( HWND hWnd, int index, LPRECT lpRect )
// 参数:
//	IN hWnd - 窗口句柄 
//	IN index - 项目索引 
//	OUT lpRect - 用于接受项目矩形
// 返回值:
//	假如成功,返回0,lpRect返回项目矩形坐标; 否则,返回LB_ERR
// 功能描述:
//	得到项目矩形坐标
//	处理 LB_GETITEMRECT 消息
// 引用: 
//	
// ************************************************

static LRESULT DoGETITEMRECT( HWND hWnd, int index, LPRECT lpRect )
{	//得到列表框窗口的列表框数据对象指针
    _LPLISTDATA lpListData = (_LPLISTDATA)GetWindowLong( hWnd, 0 );

    _ASSERT( lpListData );

    GetClientRect( hWnd, lpRect );
    if( GetItemRect( lpListData , index, lpRect, GetWindowLong( hWnd, GWL_STYLE ) ) )
        return 0;
    return LB_ERR;
}

// **************************************************
// 声明:static LRESULT DoGETLOCALE( HWND hWnd )
// 参数:
//	IN hWnd - 窗口句柄
// 返回值:
//	假如成功,返回; 否则,返回LB_ERR
// 功能描述:
//	不支持
// 引用: 
//	
// ************************************************

static LRESULT DoGETLOCALE( HWND hWnd )
{
    return LB_ERR;
}

// **************************************************
// 声明:static LRESULT DoGETSEL( HWND hWnd, int index )
// 参数:
//	IN hWnd - 窗口句柄
//	IN index - 项目索引
// 返回值:
//	假如成功,返回当前列表框被选择的项目; 否则,返回 LB_ERR
// 功能描述:
//	得到列表框被选择的项目
//	处理 LB_GETSEL 消息
// 引用: 
//	
// ************************************************

static LRESULT DoGETSEL( HWND hWnd, int index )
{	//得到列表框窗口的列表框数据对象指针
    _LPLISTDATA lpListData = (_LPLISTDATA)GetWindowLong( hWnd, 0 );

    _ASSERT( lpListData );

    if( (DWORD)index < lpListData->count )
    {
        return At( lpListData, index )->state & ODS_SELECTED;
    }
    return LB_ERR;
}

// **************************************************
// 声明:static LRESULT DoGETSELCOUNT( HWND hWnd )
// 参数:
//	IN hWnd - 窗口句柄
// 返回值:
//	假如成功,返回当前列表框被选择的项目数; 否则,返回 LB_ERR
// 功能描述:
//	得到列表框被选择的项目数(用于多行选择)
//	处理 LB_GETSELCOUNT 消息
// 引用: 
//	
// ************************************************

static LRESULT DoGETSELCOUNT( HWND hWnd )
{	//得到列表框窗口的列表框数据对象指针
    _LPLISTDATA lpListData = (_LPLISTDATA)GetWindowLong( hWnd, 0 );
    int i, n = 0;

    if( GetWindowLong( hWnd, GWL_STYLE ) & LBS_MULTIPLESEL )
    {	//多行风格
        _ASSERT( lpListData );
        for( i = 0; i < lpListData->count; i++ )
        {
            if( At( lpListData, i )->state & ODS_SELECTED )
                n++;
        }
        return n;
    }
    return LB_ERR;
}

// **************************************************
// 声明:static LRESULT DoGETSELITEMS( HWND hWnd, int maxItems, LPINT lpArray )
// 参数:
//	IN hWnd - 窗口句柄
//	IN maxItems - 需要返回的最大项目数
//	IN lpArray - 用于接受项目索引号的数组
// 返回值:
//	假如成功,返回实际拷贝的项目索引数; 否则,返回 LB_ERR
// 功能描述:
//	得到列表框中当前处于被选择状态的项目数,适用于有 LBS_MULTIPLESEL 风格的列表框
//	处理 LB_GETSELITEMS 消息
// 引用: 
//	
// ************************************************

static LRESULT DoGETSELITEMS( HWND hWnd, int maxItems, LPINT lpArray )
{	//得到列表框窗口的列表框数据对象指针
    _LPLISTDATA lpListData = (_LPLISTDATA)GetWindowLong( hWnd, 0 );
    int i, m = 0;

    _ASSERT( lpListData );

    if( GetWindowLong( hWnd, GWL_STYLE ) & LBS_MULTIPLESEL )
    {	//
        for( i = 0; i < lpListData->count && m < maxItems ; i++ )
        {
            if( At( lpListData, i )->state & ODS_SELECTED )
            {	// 符合条件
                *lpArray++ = i;
                m++;
            }
        }
        return m;
    }
    return LB_ERR;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -