Articles of c + +

调整窗口大小会导致黑条

我有一个窗体,它在构造函数中设置这些样式: this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); this.SetStyle(ControlStyles.UserPaint, true); this.SetStyle(ControlStyles.ResizeRedraw, true); this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true); 我在Paint事件中绘制了一些矩形。 表单上没有控件。 Hovewer,当我调整表格的大小时,表格的右下方有黑条。 有什么办法摆脱他们? 我已经尝试了一切,在WndProc监听WM_ERASEBKGND ,手动绘制WM_PAINT上的窗体,实现自定义双缓冲区等。还有什么我可以尝试? 我发现这个: https : //connect.microsoft.com/VisualStudio/feedback/details/522441/custom-resizing-of-system-windows-window-flickers ,它看起来像是DWM中的错误,但我只是希望我能做一些解决方法。 请注意,我必须使用双缓冲,因为我想在Paint事件中绘制相当强烈的graphics表示。 我在C#.NET 2.0,Win7中开发。 状态更新1 我设法通过自己实现resizefunction来摆脱大部分黑色条纹。 Hovewer还有一些小毛病。 有没有办法一次resize和paint操作? 这里是我需要做的一个伪代码 : IntPtr hDC; var size = new Size(250, 200); IntPtr handle = API.PaintAndResizeBegin(this.Handle /* Form.Handle */, size.Width, size.Height, out hDC); using (var g = Graphics.FromHdc(hDC)) { this.backBuffer.Render(g, […]

C ++ Windows十进制到UTF-8字符转换

我一直在使用下面的函数将Unicode字符的十进制表示转换为C ++中的UTF8字符本身。 我目前的function在Linux / Unix系统上运行良好,但在Windows上不断返回错误的字符。 void GetUnicodeChar(unsigned int code, char chars[5]) { if (code <= 0x7F) { chars[0] = (code & 0x7F); chars[1] = '\0'; } else if (code <= 0x7FF) { // one continuation byte chars[1] = 0x80 | (code & 0x3F); code = (code >> 6); chars[0] = 0xC0 | (code & 0x1F); […]