小编Kir*_*ril的帖子

Windows字体大小何时更改C++ MFC时无法检测

我正在尝试确定当用户将Windows字体大小从正常字体更改为超大字体时如何检测,通过在Windows XP计算机上执行以下步骤来选择字体大小:

  1. 右键单击桌面,然后选择"属性".
  2. 单击"外观"选项卡.
  3. 选择字体大小:正常/大字体/超大字体

我的理解是字体大小的变化会导致DPI的变化,所以这是我到目前为止所尝试的.


我的目标:

我想检测Windows字体大小何时从正常变为大或超大字体,并根据字体大小更改采取一些操作.我假设当Windows字体大小改变时,DPI也会改变(特别是当大小为超大字体时)


到目前为止我尝试过的:

我收到几条消息,包括:WM_SETTINGCHANGE,WM_NCCALCSIZE,WM_NCPAINT等......但是当字体大小改变时,这些消息都不是唯一的,换句话说,当我收到WM_SETTINGSCHANGE消息时,我想知道改变了什么.

理论上,当我定义OnSettingChange并且Windows调用它时,lpszSection应该告诉我更改的部分是什么,并且工作正常,但是我通过调用SystemParametersInfo检查给定的部分并且我传递了动作SPI_GETNONCLIENTMETRICS,然后我逐步完成调试器和我确保我在返回的NONCLIENTMETRICS中观察任何字体更改的数据,但没有发生.

即使这不起作用,我仍然可以在设置更改时检查DPI.我真的不在乎其他细节,每次我收到WM_SETTINGCHANGE消息,我只会检查DPI并执行我感兴趣的操作,但我也无法获得系统DPI.

我试图通过调用方法GetSystemMetrics来获取DPI,也为每个DC:

Dekstop DC-> GetDeviceCaps LOGPIXELSX/LOGPIXELSY窗口DC-> GetDeviceCaps LOGPIXELSX/LOGPIXELSY当前DC-> GetDeviceCaps LOGPIXELSX/LOGPIXELSY

即使我在图形属性窗口中更改DPI,这些值也不会返回任何不同的值,它们总是显示96.

有人能帮我解决这个问题吗?我应该寻找什么?我应该在哪里看?

afx_msg void CMainFrame::OnSettingChange(UINT uFlags, LPCTSTR lpszSection)
{
    int windowDPI = 0;
    int deviceDPI = 0;
    int systemDPI = 0;
    int desktopDPI = 0;
    int dpi_00_X = 0;
    int dpi_01_X = 0;
    int dpi_02_X = 0;
    int dpi_03_X = 0;

    CDC* windowDC = CWnd::GetWindowDC(); // try with window DC
    HDC desktop = ::GetDC(NULL); // try with …
Run Code Online (Sandbox Code Playgroud)

c++ winapi mfc font-size system-font

8
推荐指数
1
解决办法
5381
查看次数

面试问题:从未排序的链接列表中删除重复项

我正在阅读Cracking the Coding Interview,第四版:150编程面试问题和解决方案,我正在尝试解决以下问题:

2.1编写代码以从未排序的链表中删除重复项.关注:如果不允许临时缓冲区,您将如何解决此问题?

我在C#中解决它,所以我创建了自己的Node类:

public class Node<T> where T : class
{
    public Node<T> Next { get; set; }
    public T Value { get; set; }

    public Node(T value)
    {
        Next = null;
        Value = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的解决方案是遍历列表,然后为每个节点迭代通过列表的其余部分并删除任何重复项(请注意,我没有按照本书的指示实际编译或测试它):

public void RemoveDuplicates(Node<T> head)
{
    // Iterate through the list
    Node<T> iter = head;
    while(iter != null)
    {
        // Iterate to the remaining nodes in the list
        Node<T> current = iter;
        while(current!= null && current.Next …
Run Code Online (Sandbox Code Playgroud)

c# java linked-list

8
推荐指数
1
解决办法
2万
查看次数

使用Castle Windsor在ASP.NET MVC中设置控制反转(IoC)

我正在讨论Sanderson的Pro ASP.NET MVC框架,在第4章他讨论了创建一个自定义控制器工厂,似乎现在不推荐使用原始方法,AddComponentLifeStyleAddComponentWithLifeStyle用于注册控制器:

public class WindsorControllerFactory : DefaultControllerFactory
{
    IWindsorContainer container;

    public WindsorControllerFactory()
    {
        container = new WindsorContainer(new XmlInterpreter(new ConfigResource("castle")));

        // register all the controller types as transient
        var controllerTypes = from t in Assembly.GetExecutingAssembly().GetTypes()
                              where typeof(IController).IsAssignableFrom(t)
                              select t;

        //[Obsolete("Use Register(Component.For<I>().ImplementedBy<T>().Named(key).Lifestyle.Is(lifestyle)) instead.")]
        //IWindsorContainer AddComponentLifeStyle<I, T>(string key, LifestyleType lifestyle) where T : class;
        foreach (Type t in controllerTypes)
        {
            container.Register(Component.For<IController>().ImplementedBy<???>().Named(t.FullName).LifeStyle.Is(LifestyleType.Transient));
        }
    }

    // Constructs the controller instance needed to service each request
    protected override IController …
Run Code Online (Sandbox Code Playgroud)

reflection asp.net-mvc castle-windsor inversion-of-control

8
推荐指数
1
解决办法
2407
查看次数

双精度浮点比较

我在这里有点困惑 - 当双打存储为不透明(二进制)字段时,双打的比较仍能正常工作吗?我面临的问题是双重包括符号的前导位(即正或负),当它们存储为二进制数据时,我不确定它是否会被正确比较:

在此输入图像描述

我想确保比较正常,因为我在LevelDB中使用double作为关键元组的一部分(例如),我想保留正数和负数的数据局部性.LevelDB仅使用不透明字段作为键,但它允许用户指定他/她自己的比较器.但是,我只是想确保我没有指定比较器,除非我绝对需要:

// Three-way comparison function:
//   if a < b: negative result
//   if a > b: positive result
//   else: zero result
inline int Compare(const unsigned char* a, const unsigned char* b) const 
{
    if (*(double*)a < *(double*)b) return -1;
    if (*(double*)a > *(double*)b) return +1;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ floating-point double comparison leveldb

8
推荐指数
1
解决办法
1024
查看次数

JSP验证和重定向:如何验证表单输入并将错误转发回原始页面?

我正在上JSP,我有一个任务...我们必须编写一个JSP页面,它接受用户输入,验证输入,然后将其转发到不同的网站.更确切地说,我们被要求实施Amtrak网站的FareFinder功能的基本版本.

这个任务有两个主要目的:
(a)编写作为中间件执行的JSP;
(b)编写验证表格数据的JSP.

关于进行验证的原则,我有一个普遍的问题.目前我有一个JSP,它有一个表单和一个提交按钮.当用户单击提交按钮时,我将它们转发到Validate.jsp.然后Validate.jsp将验证数据,如果输入正常,它将自动将请求重定向到Amtrak网站,并填写所有参数.

FareFinder.jsp - > Validate.jsp - > Amtrak
(点击文件名查看我在牧场中的所有代码)

简而言之,我正在做FareFinder.jsp的主要事情:

<FORM METHOD=POST ACTION="Validate.jsp">
    <!-- all the input fields are up here -->
    <P><INPUT TYPE=SUBMIT></P>
</FORM>
Run Code Online (Sandbox Code Playgroud)

我在Validate.jsp中做的主要事情:

<%@ page import="java.util.*" import="java.io.*"%>
<%
    // retreive all the parameters
    String origin = request.getParameter("_origin");
    String depmonthyear = request.getParameter("_depmonthyear");
    String depday = request.getParameter("_depday");
    String dephourmin = request.getParameter("_dephourmin");
    String destination = request.getParameter("_destination");
    String retmonthyear = request.getParameter("_retmonthyear");
    String retday = request.getParameter("_retday");
    String rethourmin = request.getParameter("_rethourmin");
    String adults = request.getParameter("_adults");
    String children = request.getParameter("_children"); …
Run Code Online (Sandbox Code Playgroud)

java validation jsp

7
推荐指数
1
解决办法
4万
查看次数

C#文件异常:无法访问该文件,因为它正由另一个进程使用

我正在尝试从网上下载文件并将其保存在本地,但我得到一个例外:

C#进程无法访问文件'blah',因为它正由另一个进程使用.

这是我的代码:

File.Create("data.csv");  // create the file
request = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url));
request.Timeout = 30000;
response = (HttpWebResponse)request.GetResponse();

using (Stream file = File.OpenWrite("data.csv"), // <-- Exception here
    input = response.GetResponseStream())
{
    // Save the file using Jon Skeet's CopyStream method
    CopyStream(input, file);
}
Run Code Online (Sandbox Code Playgroud)

我已经看到了许多其他相同例外的问题,但它们似乎都不适用于此.有帮助吗?

更新:
谢谢你的回答!卸下File.Create(...)固定它!

关于文档的一个评论OpenWrite:它有点误导,简要说明:

打开现有文件进行写入.

详细说明如下:

如果文件存在,则打开它以便在开头写入.现有文件未被截断.

更新2.0:
看起来像IntelliSense/F1和在线文档之间的差异.我认为它应该是相同的,因为我允许F1在显示文档时连接到网络.

c# file-io exception file

7
推荐指数
2
解决办法
6052
查看次数

在Java中获取多个网页的最快方法

我正在尝试编写一个快速的HTML scraper,在这一点上,我只是专注于在不解析的情况下最大化我的吞吐量.我已缓存URL的IP地址:

public class Data {
    private static final ArrayList<String> sites = new ArrayList<String>();
    public static final ArrayList<URL> URL_LIST = new ArrayList<URL>();
    public static final ArrayList<InetAddress> ADDRESSES = new ArrayList<InetAddress>();

    static{
        /*
        add all the URLs to the sites array list
        */

        // Resolve the DNS prior to testing the throughput 
        for(int i = 0; i < sites.size(); i++){

            try {
                URL tmp = new URL(sites.get(i));
                InetAddress address = InetAddress.getByName(tmp.getHost());
                ADDRESSES.add(address);
                URL_LIST.add(new URL("http", address.getHostAddress(), tmp.getPort(), tmp.getFile()));
                System.out.println(tmp.getHost() + ": " …
Run Code Online (Sandbox Code Playgroud)

java url performance web-crawler

7
推荐指数
1
解决办法
4105
查看次数

重用异步套接字:后续连接尝试失败

我正在尝试在异步HTTP客户端中重用套接字,但是第二次我无法连接到主机.我基本上将异步HTTP客户端视为具有以下状态的状态机:

  • 可用:插座可供使用
  • 连接:套接字连接到端点
  • 发送:套接字正在向端点发送数据
  • 接收:套接字正在从端点接收数据
  • 失败:存在套接字故障
  • 清理:清理插座状态

在连接状态下我打电话BeginConnect:

private void BeginConnect()
{
    lock (_sync) // re-entrant lock
    {
        IPAddress[] addersses = Dns.GetHostEntry(_asyncTask.Host).AddressList;

        // Connect to any available address
        IAsyncResult result = _reusableSocket.BeginConnect(addersses, _asyncTask.Port, new AsyncCallback(ConnectCallback), null);
    }
}
Run Code Online (Sandbox Code Playgroud)

Sending一旦建立成功连接,回调方法就会将状态更改为:

private void ConnectCallback(IAsyncResult result)
{
    lock (_sync) // re-entrant lock
    {
        try
        {
            _reusableSocket.EndConnect(result);

            ChangeState(EClientState.Sending);
        }
        catch (SocketException e)
        {
            Console.WriteLine("Can't connect to: " + _asyncTask.Host);
            Console.WriteLine("SocketException: {0} Error Code: {1}", e.Message, e.NativeErrorCode);
            ThreadPool.QueueUserWorkItem(o =>
            {
                // An …
Run Code Online (Sandbox Code Playgroud)

c# sockets asynchronous http httpclient

7
推荐指数
1
解决办法
3470
查看次数

C++/CLI:捕获所有(.NET/Win32/CRT)异常

我知道这是不赞成的,但我在这里没有选择.我正在开发一个C++/CLI应用程序,它有一个我无法追踪的错误 - 主要是因为它绕过我当前的崩溃处理程序:

AppDomain::CurrentDomain->UnhandledException += gcnew UnhandledExceptionEventHandler(&LogAndExit);
Application::ThreadException += gcnew ThreadExceptionEventHandler(&LogAndExit);
Application::SetUnhandledExceptionMode(UnhandledExceptionMode::CatchException);
try 
{ 
    Application::Run(gcnew frmMain()); 
} 
catch (Exception^ ex) 
{ 
    LogAndExit(ex); 
} 
catch (...) 
{ 
    LogAndExit(); 
}
Run Code Online (Sandbox Code Playgroud)

我想,标准.NET崩溃处理.MSDN报告称,某些CRT异常会破坏托管堆栈并以静默方式中止应用程序.

我一直在阅读_set_invalid_parameter_handler,但即使我收到LNK2001错误,它似乎也不能与/ clr:pure一起使用.我是对的,还是我只是PEBKACing它并丢失了一个lib文件?

.net exception-handling c++-cli

7
推荐指数
1
解决办法
1万
查看次数

混合模式项目的内存泄漏检测:托管,非托管和本机

我有一个Visual Studio 2010解决方案,包含C#(托管),C++/CLI(非托管)和纯C++(本机)项目.我想在所有3个项目中或至少围绕本机代码执行内存泄漏检测:

  • C#项目引用了非托管dll(我可以访问常用的.NET内存分析工具,因此对它运行内存分析并不是一个真正的问题).
  • C++/CLI是一个非常薄的本机C++库包装器,所以我真的不需要对它进行分析(不用担心它).
  • C++本机代码是最难分析的代码.

我已经尝试过使用英特尔Inspector XE 2011,但它太慢了......做一个简单的事情,比如只是初始化我的系统并花了很长时间才完成我还没有完成它.当我在没有IXE 2011的情况下运行我的系统时,初始化我的系统需要不超过10-15秒,而使用IXE我们让它运行几个小时并且它不会超过初始化.我试图排除某些库被分析,但它绝对没有效果.

我已经尝试使用Visual Leak Detector,但在完成运行后它说它找不到任何内存泄漏.我对这个结果持怀疑态度所以我故意在经常运行的函数中放置一段代码以确保存在内存泄漏:

int* memoryLeak = new int;
Run Code Online (Sandbox Code Playgroud)

我再次使用VLD运行,但它吐出了相同的消息.我正在考虑重写new/ delete运算符,甚至只考虑malloc/ free,但我想确保在我深入研究之前已经用尽所有其他选项.

如何使用Visual Studio 2010分析我的本机C++库的内存使用情况?是否有其他工具或技术可行(即使它们没有与VS2010集成)?

c++ memory-leaks native unmanaged c++-cli

7
推荐指数
1
解决办法
4488
查看次数