在win98下如何获得透明的窗口
显示器看起来一定是透明的,用DLL直接在显示器上DC画图,怎么样让我画的线也变成透明的呢? 谢谢!
谢谢! --------------------编程问答-------------------- 哥哥 win98? --------------------编程问答-------------------- 不好意思,程序是在win98下运行的。
--------------------编程问答-------------------- 不会吧 WIN98还没淘汰? --------------------编程问答-------------------- 没有办法啊, 里面有一块老爷爷的板子,只能跑在16位的机器上;很是悲剧
--------------------编程问答-------------------- 至少你换个Win2K也行啊。呵呵 --------------------编程问答--------------------
能用Win2K,还不如就装 XP ^_^
不过,实在没明白楼主的想法和目的。-_-!!!
--------------------编程问答-------------------- 98下装个虚拟机,然后在虚拟机里面装xp,嘿嘿。 --------------------编程问答-------------------- 另外,超精简版xp貌似不会比98运行速度慢,而且对系统要求也低到与98一样。 --------------------编程问答-------------------- 把系统换成XP的,使用GDI+,可以很容易的实现你的要求。
参阅 --------------------编程问答-------------------- 感谢大家热心的回复。
我这里有一个老古董的板卡,里面有一些模块必须在出厂电脑里用( P II 的机器上),否则不工作。不知道出厂的时候,是否进行了限制。
所以没有办法了啊!
--------------------编程问答-------------------- 关键是还没理解你的‘透明’是什么意思…………
既然‘透明’了,就是‘看不见’了;
既然看不见了,就不用去‘画’了…………
-_-!!!
--------------------编程问答-------------------- 该放弃的要放弃,呵呵 --------------------编程问答--------------------
XP比2K慢多了,2K和98发行时间接近,家里1台古董(赛扬566,128M内存,2000年买的),可以流畅运行2K,并装好相关软件,装XP空系统也运行艰难 --------------------编程问答-------------------- else
{
// 前面衰减设置为0,倒数第二个设置为5db,剩下衰减设置在最后一个衰减
(vecPort2Atten.end() - 2)->second += 5;
fTotalAtten -= 5;
if (0 < fTotalAtten)
{
if (mapPort2MaxAtten[vecPort2Atten.back().first] >
fTotalAtten + vecPort2Atten.back().second)
{
vecPort2Atten.back().second += fTotalAtten;
}
else
{
vecPort2Atten.back().second = mapPort2MaxAtten[vecPort2Atten.back().first];
}
}
}
CLogIf * logif = NULL;
GET_LOG_IF(logif);
CPort* src = entity->GetSrc();
CPort* snk = entity->GetSnk();
// 异步下发命令设置衰减器衰减
vector< pair<CMD_BOARD_INFO, float> > vecPort2AttenCmd;
vector< pair<CPort*, float> >::iterator itPA = vecPort2Atten.begin();
for (; itPA != vecPort2Atten.end(); ++itPA)
{
CMD_BOARD_INFO bdInfo;
PORT_2_CMD_BDINFO((itPA->first), bdInfo);
vecPort2AttenCmd.push_back(make_pair(bdInfo, itPA->second));
if (bPrintLog)
{
string strLog = ::FormatString("(lambda %d)opa- send to ne, %s, the loss = %f",
lambda, bdInfo.toString().c_str(), itPA->second);
logif->LogDebugInfo(assert_internal_error,
FIBERVERIFY_MODULE_NAME, __FILE__, __LINE__, strLog);
}
//_EXEC_FUNC_AND_RET_ERR_(itPA->first->SetAtten(itPA->second, lambda));
}
vector<ULONG> vecPortCmdResult;
_EXEC_FUNC_NO_RET_ERR_(ulRst, pNetworkCfgIf->SetAttenAsync(vecPort2AttenCmd, vecPortCmdResult));
if (RESULT_SUCCESS != ulRst)
{
vector< pair<CMD_BOARD_INFO, float> > vecPort2AttenCmd2;
vector<ULONG>::iterator itRst = vecPortCmdResult.begin();
for (; itRst != vecPortCmdResult.end(); ++itRst)
{
if (RESULT_SUCCESS != *itRst)
{
vecPort2AttenCmd2.push_back(vecPort2AttenCmd[itRst - vecPortCmdResult.begin()]);
}
}
// 下发失败的命令再重试下发一次
_EXEC_FUNC_AND_RET_ERR_(pNetworkCfgIf->SetAttenAsync(vecPort2AttenCmd2, vecPortCmdResult));
}
return RESULT_SUCCESS;
}
--------------------编程问答--------------------
// 获取所有衰减调节点
vector<CVerifyRoute*> vecVerifyRoute = entity->GetVerifyRoute();
vector<CVerifyRoute*>::iterator itRoute = vecVerifyRoute.begin();
for (; vecVerifyRoute.end() != itRoute; ++itRoute)
{
vector<CLink*> vecLink;
(*itRoute)->GetAllLink(vecLink);
vector<CLink*>::const_iterator itLk = vecLink.begin();
for (; vecLink.end() != itLk; ++itLk)
{
CLink* pLink = *itLk;
if (pLink->GetSnkPort()->IsSupportAtten())
{
CPort * pAttenPort = pLink->GetSnkPort();
vector< pair<CPort*, float> >::iterator itPA = vecPort2Atten.begin();
for (; itPA != vecPort2Atten.end(); ++itPA)
{
if (itPA->first == pAttenPort)
{
break;
}
}
if (itPA != vecPort2Atten.end())
{
continue;
}
pAttenPort->SetCurChannelIDbyWave(lambda); //根据当前的校验波长更新通道ID,需要下发网元查询单板工作波长范围
float fMaxThAtten;
float fMinThAtten;
_EXEC_FUNC_AND_RET_ERR_(pAttenPort->GetAttenTh(fMinThAtten, fMaxThAtten));
vecPort2Atten.push_back(make_pair(pAttenPort, fMinThAtten + (float)0.2 ));
fTotalAtten -= fMinThAtten + (float)0.2;
mapPort2MaxAtten[pAttenPort] = fMaxThAtten - 0.2;
}
}
}
if (vecPort2Atten.empty())
{
return RESULT_SUCCESS;
}
// 计算每个衰减器的衰减
if (1 == vecPort2Atten.size()
|| fTotalAtten <= 5)
{
if (0 < fTotalAtten)
{
if (mapPort2MaxAtten[vecPort2Atten.back().first] >
fTotalAtten + vecPort2Atten.back().second)
{
vecPort2Atten.back().second += fTotalAtten;
}
else
{
vecPort2Atten.back().second = mapPort2MaxAtten[vecPort2Atten.back().first];
}
}
} --------------------编程问答-------------------- ULONG COPAAlgorithm::SetOpaAtten(COPAEntity* entity, const ULONG & lambda, const float & fLoss, bool bPrintLog)
{
ULONG ulRst = 0;
vector< pair<CPort*, float> > vecPort2Atten;
map<CPort*, float> mapPort2MaxAtten;
CNetworkCfgIf* pNetworkCfgIf;
GET_NETWORK_CFG_IF(pNetworkCfgIf);
float stdOutPower = 0.0;
float stdInPower = 0.0;
ulRst = GetOPAInOutStdPower(entity, stdOutPower, stdInPower);
if (RESULT_SUCCESS != ulRst)
{
return ulRst;
}
float fTotalAtten = stdOutPower - stdInPower - fLoss;
--------------------编程问答-------------------- 楼上C++都用上了,人才啊!
主要是Win98没有API函数SetLayeredWindowAttributes,不好实现透明。我曾经在枕善居上看到过VB实现的透明气泡,背景可以颜色渐变,是用GDI实现的,后来我在Win98下测试成功。
--------------------编程问答-------------------- 那干脆用 DX 接口来实现算了。
^_^
--------------------编程问答-------------------- WIN98下不支持透明的.
当年我也想实现这效果.....实在是没招.
不过我注意到拖动图标时,WIN98的图标也是半透明的....
但当时水平比现在还要烂得多,所以没结果. --------------------编程问答--------------------
I think so, 2 --------------------编程问答-------------------- WIN98现在还有吗??? --------------------编程问答-------------------- 百叶窗就可看做是半透明的。
补充:VB , API