我正在开发一个电子邮件客户端,我希望在收到邮件时屏幕会短暂闪烁.我在.NET文档中随处搜索,但我发现实现它的唯一方法是使用DirectX函数,这当然是不可能的:我不希望我的用户只为邮件客户端安装DirectX :)
有没有办法只用GDI做到这一点?
谢谢
使用GDI +进行编程时,我是否需要坚持使用模式来处理各种对象,如Brush,Font,这会使代码变得非常混乱.
有什么建议?
> case WM_PAINT:
{
> hdc = BeginPaint(hWnd, &ps);
> // TODO: Add any drawing code here...
> RECT rt;
> GetClientRect(hWnd, &rt);
> HDC myHdc = CreateCompatibleDC(hdc);
>
> DrawText(myHdc, szHello, strlen(szHello), &rt, DT_CENTER);
> BitBlt(hdc,0,0,rt.right-rt.left,rt.bottom-rt.top,myHdc,0,0,SRCCOPY);
>
> EndPaint(hWnd, &ps);
}
>
> break;
Run Code Online (Sandbox Code Playgroud)
为什么文字无法在窗口显示?
我在这个程序中使用BitBlt时遇到了麻烦.您调整窗口大小,椭圆随之调整大小.当然,使用普通的hdc方法,它是波涛汹涌的.我尝试了BitBlt方法,但这也不起作用(可能是因为我做错了).有人可以解决我的错误吗?感谢名单
bool sizing; //global
case WM_PAINT:
{
RECT rect;
GetClientRect(hwnd, &rect);
hdc = BeginPaint(hwnd, &ps);
mem = CreateCompatibleDC(hdc);
SelectObject(mem, GetStockObject(HOLLOW_BRUSH));
if(sizing)
{
Ellipse(mem,rect.left, rect.top, rect.right, rect.bottom);
}
BitBlt(hdc, rect.left, rect.top, rect.left - rect.right, rect.top -rect.bottom , mem, rect.left, rect.top, SRCCOPY);
DeleteDC(mem);
EndPaint(hwnd, &ps);
break;
}
case WM_SIZE:
sizing = true;
break;
Run Code Online (Sandbox Code Playgroud) 我正在从一个8位彩色DC到单色DC进行BitBlt.问题是在单色DC中只有值为255的像素被转换为白色.如何指定阈值,以便任何值大于128的像素在单色DC中显示为白色.
我试图打破一个长短语,取决于我的摩天大楼横幅宽度大小,不能超过三个字,我搜索互联网,发现一个脚本,通过设置短语的字符来打破文本,这是它.
<?
header("Content-type: image/png");
$string = $_GET['text']. ' Click Here';
$im = imagecreatefrompng("../../images/skyscrapper.png");
$orange = imagecolorallocate($im, 0, 0, 0);
$px = (imagesx($im) - 3.8 * strlen($string)) / 2;
$font = 'verdana.ttf';
// Break it up into pieces 10 characters long
$lines = explode('|', wordwrap($string, 10, '|'));
// Starting Y position
$y = 450;
// Loop through the lines and place them on the image
foreach ($lines as $line)
{
imagestring($im,3, $px, $y, $string, $orange);
// Increment Y so the next …Run Code Online (Sandbox Code Playgroud) 我想把我的"屏幕"保存在bmp中; 但是我认为我做错了,因为这段代码非常慢:
HDC Win = GetDC(NULL);
for (j = 0; j < y; j++)
for (i = 0; i < x; i++)
img->data[j][i] = GetPixel(Win, i, j);
Run Code Online (Sandbox Code Playgroud) 如何将原始图像数据获取到VB.NET中的String,类似于以下内容:
J©õݨe‚Lnž¿Ëã/ǧúÐ5ý¼C÷Cý>ß’t;fm—=Äw:?/E±ËÙÏ$á@%Pc>× Šgw.²Ab“:ÅÓù:ϯÌh6à€Z§Ó‚g£®hÚD6¨Ø^Ú2ô`ä¨L?YÆÄÅCX#I“ÈÌãj¦L˜•’|¥?Eb¡ëQ–¤Ú, 3\UzL öÔoj4?•±’u«c¼#„oÕ`îF>·o—ŠûÅ«ÎÑ™¶Ç˜ýº*i°œÈVŒ?Qû”Ñ[.?ÔmçE•ì¦eNCh?Ù
é§?É$m¿ôš"»ÌNæ(VÌmp›F¹XÈ88™ªüµ…d•XµÔÜ#?ˆŠv‘º‚F‚§Yûb
Run Code Online (Sandbox Code Playgroud)
我目前的代码是:
Dim FileName As String = "Image.jpg"
Dim ImageData() As Byte = File.ReadAllBytes(ProfileImagePath)
Dim NewImageData As String = Convert.ToBase64String(ImageData)
Run Code Online (Sandbox Code Playgroud)
这将返回Base64代码,但我正在尝试获取上面示例中的实际原始数据,以便我可以POST到多部分上传表单,该表单也以这种方式发布.
我上传的完整代码是:
Dim boundary As String = "-----------------------------" & DateTime.Now.Ticks.ToString("x")
Dim req As HttpWebRequest = DirectCast(WebRequest.Create("http://www.mysite.com/upload.php"), HttpWebRequest)
req.Method = "POST"
req.ContentType = "multipart/form-data; boundary=" & "---------------------------" & DateTime.Now.Ticks.ToString("x")
req.KeepAlive = False
Dim builder As New StringBuilder()
builder.Append(boundary & vbCrLf & "Content-Disposition: form-data; name=""variable1""" & vbCrLf & vbCrLf & "1" & vbCrLf)
builder.Append(boundary & vbCrLf & …Run Code Online (Sandbox Code Playgroud) 如何实现自定义控件的滚动?我的控件是完全自定义绘制的,其高度是可变的,并且控件的一部分包含一个菜单,因此,如果控件中有很多项目,则需要在其中放置滚动条。我真的无法找到有关如何执行此操作的任何线索。我确实看到了有关的信息ScrollableControl,但是我仍然不确定这是否是我需要的。
另外,我的控件如何知道何时需要显示滚动条?因为我的控件是完全自定义绘制的,所以里面没有真正的“控件”,所以只绘制了一堆像素,所以我不能像将AutoScroll设置为true一样,因为它不是控件的主要部分需要滚动,它是控件上需要滚动条的特定位置。
我使用windows GDI API ExtTextOut函数来绘制这样的文本:
ExtTextOut(hDC, 2000, 2000, 0, &stRect, PrintText, TextOutLen, aiCharCellDistances);
Run Code Online (Sandbox Code Playgroud)
我正在尝试旋转文本,我会旋转文本.但是当我用颜色填充矩形时,我发现矩形没有随文本一起旋转.
有没有办法用文本旋转矩形?或者有更好的方法吗?
PS:我的目标是在矩形(如文本区域)中绘制文本,并可以任意角度旋转,并设置背景颜色,边框线,换行符,右对齐等.
谢谢!